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)
在您编写的任何动态分配内存的代码中,您对分配的任何内存块都有 2 个责任:(1)始终保留一个指向内存块起始地址的指针,(2)当它不是时可以释放它不再需要。释放内存取决于您。
如果您将新的内存块分配给当前指向现有内存块的指针,而没有先释放该块,则您刚刚覆盖了指针所持有的原始内存块的起始地址(违反了上面的规则 1)并且你现在失去了释放原始块的能力——这是你的内存泄漏。