假设我们单独运行这段代码:
malloc(1024);
这是否会导致内存泄漏,或者C会自动知道释放没有引用的指针吗?
换句话说,我可以避免将其分配给指针吗?
void *p = malloc(1024);
free(p);
答案 0 :(得分:5)
这是内存泄漏。 C绝对没有内存管理(除了C编译器为变量分配堆栈空间)。
答案 1 :(得分:4)
在您编写的任何动态分配内存的代码中,对于分配的任何内存块,您有2个职责:(1)始终保留指向起始地址的指针因此,(2)当不再需要时,它可以释放。释放内存取决于你。
如果您将一个新的内存块分配给当前指向现有内存块的指针而没有首先释放该块,那么您刚刚覆盖了起始地址对于指针所占用的原始内存块(违反上面的规则1 ),你现在已经失去了释放原始块的能力 - 这就是你的内存泄漏。