C会自动释放没有指针的内存吗?

oin*_*ink 2 c pointers memory-management

假设我们单独运行这段代码:

malloc(1024);
Run Code Online (Sandbox Code Playgroud)

这会导致内存泄漏,还是C会自动知道释放没有引用的指针?

换句话说,我可以避免将其分配给指针吗?

void *p = malloc(1024);
free(p);
Run Code Online (Sandbox Code Playgroud)

Jas*_*zun 5

这是一个内存泄漏.C绝对没有内存管理(除了C编译器为变量分配堆栈空间).


Dav*_*ica 5

在您编写的任何动态分配内存的代码中,您对分配的任何内存块都有 2 个责任:(1)始终保留一个指向内存块起始地址的指针,(2)当它不是时可以释放它不再需要。释放内存取决于

如果您将新的内存块分配给当前指向现有内存块的指针,而没有先释放该块,则您刚刚覆盖了指针所持有的原始内存块的起始地址(违反了上面的规则 1)并且你现在失去了释放原始块的能力——这是你的内存泄漏。