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