考虑以下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不再指向它了,所以它不能被使用,但是它仍然被认为是"免费"列表的一部分,还是这是一个明确的内存泄漏?
Ant*_*ony 10
内存仍然被分配,导致内存泄漏.你想要其他任何方式吗?机器/编译器确实没有办法知道应该回收你分配的内存.如果这不是正确的行为,那么您的代码将以概率方式运行:您永远不会真正信任该代码.
您可以在将来的某个时间重新指向该内存块,因此自动释放它会从您身下拉出地毯.