如果您不使用malloc'ed块会发生什么?

2 c malloc free memory-leaks

考虑以下C代码:

int main(){  
    int* c;  
    c = (int*)malloc(sizeof(int));  
    c = 0xdeadbeef;  
    free(c);  
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

这将是段错误,因为你试图释放c,这不是之前已经过malloc的东西.我的问题是我刚刚使用malloc'ed的块会发生什么?显然c不再指向它了,所以它不能被使用,但是它仍然被认为是"免费"列表的一部分,还是这是一个明确的内存泄漏?

tpd*_*pdi 12

这是一个泄漏.当程序终止时,操作系统将回收它.


Ant*_*ony 10

内存仍然被分配,导致内存泄漏.你想要其他任何方式吗?机器/编译器确实没有办法知道应该回收你分配的内存.如果这不是正确的行为,那么您的代码将以概率方式运行:您永远不会真正信任该代码.

您可以在将来的某个时间重新指向该内存块,因此自动释放它会从您身下拉出地毯.