如何断言释放内存

时间:2013-04-24 17:04:42

标签: c++ c memory-leaks free assert

我有一个没有记忆的功能。

我希望在调用此函数后断言该函数释放了给定的内存。

我无法改变这个功能中的任何东西。

我需要进行单一测试。我想测试我的函数,我想检查一下我的函数在调用后真正释放内存

问题在于代码

void func(char *mem)
{
  // Some where in the function there is a free of the memory
  // The free could be into if condition so there is a risk to not be executed
}

int main()
{
   char *mem = malloc(20);
   func(mem);
   // how to assert here that the memory is freed?
}

1 个答案:

答案 0 :(得分:5)

简短的回答:没有办法实现这一点。

确保释放内存的常用方法不会被意外重用或识别某些指针是免费的,是在释放后立即将其设置为NULL。为此,在您的示例中,您需要对func()进行更改。如果您无法对func()进行任何更改,则无法确定传递给它的指针是否已释放或仍然有效。

此外,如果你的func()要为某些调用释放内存而不是其他调用,那么这是一个糟糕的设计。必须有一种更好,更透明的方式来管理动态分配的内存。