cppcheck : 可能的空点取消引用

Posted

技术标签:

【中文标题】cppcheck : 可能的空点取消引用【英文标题】:cppcheck : possible null point dereference 【发布时间】:2016-03-22 09:51:41 【问题描述】:

我下面的代码工作正常,但“cppcheck”仍然发出警告,

Either the condition 'mem_limit_str!=0' is redundant or there is possible null pointer dereference: mem_limit_str.

下面是代码,

 if (mem_limit_str!= NULL) //CPPCHECK error
                free(mem_limit_str);

谁能帮我解决这个问题?

【问题讨论】:

你可以free(NULL),所以检查没用。 【参考方案1】:

您无需在freeing 之前检查空指针。你可以简单地说:

free(mem_limit_str);  // no if condition

这个警告只是告诉if 条件是多余的。

来自n1124草稿

7.20.3.2 免费功能

概要

#include <stdlib.h> 
void free(void *ptr); 

说明

free函数使ptr指向的空间变为 已解除分配,即可供进一步分配使用。如果 ptr 是 空指针,不发生任何动作。 [...]

【讨论】:

那如果 mem_limit_str 指向 NULL,我会得到分段错误,对吧? 好的 试过了 谢谢。我认为释放 NULL 无效。【参考方案2】:

std::free 可以很好地与空指针一起使用。检查是多余的。

如果 ptr 是一个空指针,该函数什么也不做。

顺便说一句:deletedelete[] 也是如此。

【讨论】:

@Chirag BTW,在 c++ 中,deletedelete[] 也是如此。

以上是关于cppcheck : 可能的空点取消引用的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck 取消引用空指针

cppcheck 空指针取消引用,但它实际上可以变为空

带有空大括号的 C++ 新初始化触发 cppcheck uninitvar 错误

什么是取消引用可能的空指针?

如何通过 Cppcheck 解释 Null 指针取消引用?

如何在声纳中解决这个“可能的空指针取消引用”关键问题?