Я делаю узел 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 \ элт \ crtw32 \ разное \ dbgheap.c Line: 1322Expression: _CrtIsValidHeapPointer (pUserData)
Вы не должны явно вызывать деструктор 'SREngineJulius'. – molbdnilo
@molbdnilo Я делаю, чтобы освободить память, которая нужна 'SREngineJulius'. Например, акустические модели, языковые модели и т. Д. Любая альтернатива? Во всяком случае, я поеду без деструктора. – jdscardoso
Альтернативой является не делать этого. Деструктор вызывается автоматически, когда срок жизни объекта заканчивается. Явное обращение к ней заставляет его вызываться дважды, что имеет неопределенное поведение. – molbdnilo