C++ 中的内存泄漏问题

问题描述 投票:0回答:1

为什么内存泄漏是 C++ 代码中的一个大问题以及如何更轻松地检测它们?

int foo() 
{ 
    char *buffer = (char *)malloc(10); 
 
    if (checkError()) 
        return 0; 
 
    bar(buffer); 
 
    free(buffer); 
    return 1; 
}

如果出现错误情况,函数将返回并且永远不会调用 free。

如何预防?

c++ memory memory-leaks
1个回答
-4
投票

可以使用 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;  
}

注意

  • 不考虑异常,如果您的代码使用异常处理,您需要做一些不同的事情
© www.soinside.com 2019 - 2024. All rights reserved.