我创建了一个小测试,以创建内存泄漏并使用泄漏命令在终端中测试泄漏。现在我遇到了一个带有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。