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)
你不应该明确地调用'SREngineJulius'的析构函数。 – molbdnilo
@molbdnilo我正在这样做,以释放“SREngineJulius”需要的内存。像,声学模型,语言模型等任何替代?无论如何,我会托盘没有析构。 – jdscardoso
另一种方法是不做。当对象的生命期结束时,析构函数会自动调用。显式调用它会导致它被调用两次,这有未定义的行为。 – molbdnilo