Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何断言内存已释放_C++_C_Memory Leaks_Free_Assert - Fatal编程技术网

C++ 如何断言内存已释放

C++ 如何断言内存已释放,c++,c,memory-leaks,free,assert,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

我有一个函数,其中有一个空闲的内存

我想在调用这个函数后断言这个函数已经释放了给定的内存

我不能改变这个函数中的任何东西


我在大学考试时需要这个。我想测试我的函数,我想检查我的函数在调用后是否真的释放了内存

问题在代码中

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?
}

简单回答:没有办法做到这一点

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


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

简短的回答:没有办法做到这一点

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



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

您不需要这样做。如果您
free()
内存,它将被释放。@H2CO3仔细阅读问题。@gbtimmon我确实完整阅读了问题。设计有缺陷,这是一个XY问题。解决方案不是“断言内存是否已释放”。我不确定,但也许您试图确定的是内存是否真的已释放,如果不是断言或出错。这可能已经在free中实现了。你不需要检查它。如果你想这样做,这将变得杂乱无章complex@H2CO3我同意你的看法。我们必须跟踪自己,你不需要。如果您
free()
内存,它将被释放。@H2CO3仔细阅读问题。@gbtimmon我确实完整阅读了问题。设计有缺陷,这是一个XY问题。解决方案不是“断言内存是否已释放”。我不确定,但也许您试图确定的是内存是否真的已释放,如果不是断言或出错。这可能已经在free中实现了。你不需要检查它。如果你想这样做,这将变得杂乱无章complex@H2CO3我同意你的看法。我们必须跟踪自己,我需要它来做大学测试。我想测试我的功能,我想检查我的功能是否真的释放了内存。它与我的程序设计无关在这种情况下,您可以让func()在释放时将指针设置为NULL,并检查调用函数中的NULL。将指针设置为NULL如何帮助我们确定内存已释放?因为func()中的指针是一个副本,我们将该副本更改为NULL,因此main的变量“mem”没有任何更改。@ASHISHNEGI您可以将指针传递给指针,以修改调用者中的指针,或者使函数返回NULL或其他唯一值,让调用者知道传入的指针是自由的。如果func()可以修改,那么如何实现这一点取决于您的品味。我需要在uni测试中使用它。我想测试我的功能,我想检查我的功能是否真的释放了内存。它与我的程序设计无关在这种情况下,您可以让func()在释放时将指针设置为NULL,并检查调用函数中的NULL。将指针设置为NULL如何帮助我们确定内存已释放?因为func()中的指针是一个副本,我们将该副本更改为NULL,因此main的变量“mem”没有任何更改。@ASHISHNEGI您可以将指针传递给指针,以修改调用者中的指针,或者使函数返回NULL或其他唯一值,让调用者知道传入的指针是自由的。如果func()可以修改,那么如何实现这一点就取决于您的品味。