2015-10-07 3 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 \ элт \ crtw32 \ разное \ dbgheap.c Line: 1322

Expression: _CrtIsValidHeapPointer (pUserData)

+3

Вы не должны явно вызывать деструктор 'SREngineJulius'. – molbdnilo

+0

@molbdnilo Я делаю, чтобы освободить память, которая нужна 'SREngineJulius'. Например, акустические модели, языковые модели и т. Д. Любая альтернатива? Во всяком случае, я поеду без деструктора. – jdscardoso

+1

Альтернативой является не делать этого. Деструктор вызывается автоматически, когда срок жизни объекта заканчивается. Явное обращение к ней заставляет его вызываться дважды, что имеет неопределенное поведение. – molbdnilo

ответ

0

Как @molbdino говорит, деструктор будет вызывать проблемы. Извлеките его, решит «Ошибка отладки отладки».