2015-10-07 222 views
0

我在做一个nodejs插件。该代码波纹管是最后程序的一部分,使语音识别:调试断言失败

char * resultado = Julius[cliente_id].NotifyCallbackLoop("random"); 
float cm = Julius[cliente_id].ReturnCM(); 
Julius[cliente_id].~SREngineJulius(); 
cout << "End Recognition - Client -->" << cliente_id << endl; 

// create a ISO-8859-1 a.k.a. Latin1 string 
const uint8_t* octets = reinterpret_cast<const uint8_t*>(result); 
Local<String> devolve = String::NewFromOneByte(isolate, octets); 


Local<Number> num = Number::New(isolate, cm); 

Local<Object> obj = Object::New(isolate); 
obj->Set(String::NewFromUtf8(isolate, "cm"), num);   
obj->Set(String::NewFromUtf8(isolate, "recog"), devolve); //C++--->JS 
args.GetReturnValue().Set(obj); 

如果result像“家”小言,这会工作得很好,许多用户的服务器。但是,如果这个词更大,就像“信号处理实验室”一样,服务器将在插件中崩溃。调试结束后,我认为这个插件将运行正常,直到"End Recognition - Client -->"。然后出现此错误:

调试断言失败!
文件:F:\ vctools \ CRT \ crtw32 \杂项\ dbgheap.c 行:1322

表达:_CrtIsValidHeapPointer(pUserData)

+3

你不应该明确地调用'SREngineJulius'的析构函数。 – molbdnilo

+0

@molbdnilo我正在这样做,以释放“SREngineJulius”需要的内存。像,声学模型,语言模型等任何替代?无论如何,我会托盘没有析构。 – jdscardoso

+1

另一种方法是不做。当对象的生命期结束时,析构函数会自动调用。显式调用它会导致它被调用两次,这有未定义的行为。 – molbdnilo

回答

0

由于@molbdino说,析构函数会导致问题。删除它,将解决“调试断言失败”。