2015-10-07 216 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說,析構函數會導致問題。刪除它,將解決「調試斷言失敗」。