我创建了一个小测试,以创建内存泄漏并使用泄漏命令在终端中测试泄漏。现在我遇到了一个带有NULL的奇怪行为。那么为什么其他代码会泄漏而其他代码不会泄漏呢?他们不是真的一样吗?


int     main(void)
{
    char *ptr;
    char *btr;

    ptr = NULL;
    btr = (char*)malloc(4);
    btr = ptr;
    while (1)
        ;
    return (0);
}
    // LEAKS

int     main(void)
{
    char *btr;

    btr = (char*)malloc(4);
    btr = NULL;
    while (1)
        ;
    return (0);
}
    //NO LEAKS ?? why

最佳答案

如果有任何危险,我会警告您打开编译器优化功能。
在第二个示例中,这可能会忽略该行

btr = (char*)malloc(4);


在编译过程中,因为您立即将结果设置为NULL。

10-04 19:28