为什么内存泄漏是 C++ 代码中的一个大问题以及如何更轻松地检测它们?
int foo()
{
char *buffer = (char *)malloc(10);
if (checkError())
return 0;
bar(buffer);
free(buffer);
return 1;
}
如果出现错误情况,函数将返回并且永远不会调用 free。
如何预防?
可以使用 goto 标签进行错误处理并确保在所有路径中调用 free ,就像这样
int foo()
{
char *buffer = 0;
buffer = malloc(10);
if(!buffer)goto err0;
if (checkError())
goto err0;
bar(buffer);
free(buffer);
return 1;
err0:
if(buffer)free(buffer);
return 0;
}
注意