Я сталкиваюсь с очень абсурдной проблемой, связанной с использованием перечислений в 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 он говорит следующее условие:
Похоже, не было ни одного случая, в который это могло бы вписаться, однако klocwork сообщает об этом. И никаких утечек, как проанализировал valgrind, для той же настройки кода.
Любая подсказка, для этой возможности ??
Задача ещё не решена.