C++ 这个报错

C++ 这个报错,c++,runtime,runtime-error,C++,Runtime,Runtime Error,我正在做一个nodejs插件。下面的代码是进行语音识别的最后一个例程的一部分: char * resultado = Julius[cliente_id].NotifyCallbackLoop("random"); float cm = Julius[cliente_id].ReturnCM(); Julius[cliente_id].~SREngineJulius(); cout << "End Recognition - Client -->&

我正在做一个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);
char*resultado=Julius[cliente_id].NotifyCallbackLoop(“random”);
float cm=Julius[cliente_id].ReturnCM();
朱利叶斯[cliente_id]。~SREngineJulius();
库特JS
args.GetReturnValue().Set(obj);
如果
result
是像“home”这样的小词,那么对于服务器上的许多用户来说,这将很好地工作。但是如果这个词更大,比如“信号处理实验室”,服务器就会在插件中崩溃。调试完成后,我断定加载项将正常运行,直到
“End Recognition-Client-->”
。然后出现以下错误:

调试断言失败
文件:f:\vctools\crt\crtw32\misc\dbgheap.c 电话号码:1322

表达式:_CrtIsValidHeapPointer(pUserData)


正如@molbdino所说,析构函数将导致问题。删除它将解决“调试断言失败”的问题。

您不应该显式调用
SREngineJulius
@molbdnilo的析构函数来释放
SREngineJulius
所需的内存。比如,声学模型,语言模型等等,还有其他选择吗?无论如何,我会在没有析构函数的情况下使用托盘。否则就不这样做。当对象的生存期结束时,会自动调用析构函数。显式调用它会导致调用它两次,这具有未定义的行为。因此@molbdnilo,如果我“重用”一个对象
SREngineJulius
,则会自动调用Destructor,或者新参数替换旧参数?“重用”?是否使用“新放置”创建它们?(如果您只是分配一个新值,那么您有责任确保赋值运算符执行正确的操作。)