Перечисления ведут себя по-разному в двух отдельных файлах

Я сталкиваюсь с очень абсурдной проблемой, связанной с использованием перечислений в cpp source. Я просто делюсь разделом, где проблема.

У меня есть enum объявлен в заголовочном файле, как: < type.h>

 enum type{
BT_PLAY,
BT_DEACT
};

Следующий файл < com.cpp>, использование как:

#include <type.h>
...
void sendmsg(unsigned short requestId, char* json)
{
..
void *data = Conv::doConvertReq(requestId, json, size);
...
if(NULL != data){
if(BT_PLAY == requestId){
delete [](char*)data;
data = NULL;

} else{
delete data;
data = NULL;
}

}
}

Следующий файл < conv.cpp>, чей API вызывается в < com.cpp>. Использование как;

void*
Conv::doConvertReq(unsigned short requestId, const char* json, int& size){

switch(requestId){
...
case BT_PLAY:
{
char *val = new char[10];
data = (void*) val;
break;
}
case BT_DEACT:
{
struct *btDeact = new BT_T();
data = (void*) btDeact;
break;
}
...
}

Теперь, когда я анализирую код с помощью Klocwork, Я вижу утечку как;

Освобождение несоответствующей памяти от «данных». Память, на которую ссылаются «данные», выделенная через функцию «doConvertReq» в строке 70, незаконно освобождается путем передачи аргумента 1 в функцию «удалить []»

При трассировке через traceBlocks он говорит следующее условие:

  • на случай BT_DEACT, в файле conv.cpp, перераспределение делается в «BT_PLAY == requestId» чехол внутри sendmsg (…) API com.cpp файл.

Похоже, не было ни одного случая, в который это могло бы вписаться, однако klocwork сообщает об этом. И никаких утечек, как проанализировал valgrind, для той же настройки кода.
Любая подсказка, для этой возможности ??

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]