我面临非常荒谬的问题,在cpp源代码中使用枚举。我只是分享问题所在的部分。
我在头文件中声明了一个枚举,如:< 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;
}
}
}
接下来是文件&lt; conv.cpp&gt; ,其API在&lt;中被调用com.cpp&gt; 。用法如下;
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 分析代码时,我发现泄漏报告为;
从数据&#39;中解放不匹配的内存。由&#39;数据&#39;引用的内存通过功能分配&#39; doConvertReq&#39;在第70行被非法释放,将参数1传递给函数&#39;删除[]&#39;
在跟踪traceBlocks时,它表示条件为:
似乎没有任何情况,这适合,但klocwork报告这一点。并且没有泄漏,正如valgrind所分析的那样,对于相同的代码设置。 任何线索,对于这种可能性??