下面的 C 代码是否存在内存泄露问题?
#include <stdlib.h>
int *a;
int main() {
a = malloc(sizeof(int)*10);
return 0;
}
下面的 C 代码是否存在内存泄露问题?
#include <stdlib.h>
int *a;
int main() {
a = malloc(sizeof(int)*10);
return 0;
}
至少大多数人使用这个术语的方式是肯定的——程序分配但从未释放的任何内存都被视为泄漏。
与此同时,大多数人主要关注渐进式泄漏——随着程序运行,可能会泄漏越来越多的内存,例如在循环内进行分配,并未释放该内存。
特别是对于那些确实需要一些内存始终保持分配状态的程序,释放和退出之前保留内存分配之间的区别更多地成为一个吹毛求疵的问题,而不是真正有用的区别。一些人认为即使只在退出之前立即释放内存也是一种耻辱。其他人则认为,在退出之前明确释放内存是一种浪费代码(并且容易出现错误)的做法(当任何设计良好的操作系统都将重新获得进程的资源时)。
是的,您的程序存在内存泄漏问题。您分配了大小为10×4的内存[考虑int占用4个字节],但您没有释放这些内存。为避免内存泄漏,您必须释放已分配的内存。
#include <stdlib.h>
int *a;
int main()
{
/* allocating the Memory */
a = malloc( sizeof (int) *10 );
/* free the allocate memory */
free ( a );
return 0;
}
由于程序在分配内存后立即退出,因此Linux(或Windows)将自动free
该内存空间,因此不会泄漏,但如果您在malloc
之后并在程序结束之前执行其他操作,则会导致内存泄漏。
malloc
分配的内存如果没有显式地被free
释放,操作系统不能保证回收该内存 - 这种行为不是C标准所要求的。然而,我不会因为你提到了Linux和Windows而对此进行贬低评价。 - Drew McGowen