枚举在两个单独的文件中表现不同

时间:2015-05-18 10:27:23

标签: c++ enums klocwork

我面临非常荒谬的问题,在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时,它表示条件为:

  • 对于案例 BT_DEACT ,在文件 conv.cpp 中,取消分配在&#34; BT_PLAY == requestId&#34; 案例 sendmsg(...) com.cpp 文件的API。

似乎没有任何情况,这适合,但klocwork报告这一点。并且没有泄漏,正如valgrind所分析的那样,对于相同的代码设置。 任何线索,对于这种可能性??

0 个答案:

没有答案