cppcheck 认为 alloc 和 dealloc 不匹配

Posted

技术标签:

【中文标题】cppcheck 认为 alloc 和 dealloc 不匹配【英文标题】:cppcheck thinks there is a mismatch in alloc and dealloc 【发布时间】:2015-09-04 09:41:40 【问题描述】:

cpp-check 错误是:error mismatchAllocDealloc false Mismatching allocation and deallocation: val2

我应该怎么做才能修复这个错误?

void MainWindow::ParseDemo(char *pBuf)

  char* val2 = new char[256];
  for (int i = 0; i < 254; i++)
  
     val2[i] = pBuf[i+305];
  
  val2[254] = 0; // 0-Termination
  QString sunit(val2);
  DoStuff(sunit);
  delete val2;
  // ... 

【问题讨论】:

不是说有泄漏,而是说有不匹配。如果你写了free(val2);,它可能还会说。 【参考方案1】:
error mismatchAllocDealloc false Mismatching allocation and deallocation: val2

newnew [] 需要以与deletedelete [] 一致的方式使用,这就是cppcheck 抱怨的原因。

我应该怎么做才能修复这个错误?

delete [] val2;,应该可以解决它。

顺便说一句,这并不直接表示内存泄漏,但它很容易成为一个,因为它基本上是未定义的行为。

【讨论】:

以上是关于cppcheck 认为 alloc 和 dealloc 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck静态代码检查工具使用教程

cppcheck静态代码检查工具使用教程

CMAKE 有条件地运行 cppcheck

cppcheck 超出范围

如何使用 stdint.h 的 int64_t 变量(cpcheck 认为它是有符号整数)防止 %"PRIi64" (%lld) 的 cppcheck (v1.72) 警告

cppcheck 检测到资源泄漏 - 误报?