流动的C代码中是否存在内存泄漏?
#include <stdlib.h>
int *a;
int main() {
a = malloc(sizeof(int)*10);
return 0;
}
答案 0 :(得分:7)
至少大多数人使用这个术语的方式,答案是肯定的 - 程序分配的任何内存都不会被认为是泄漏。
与此同时,大多数人主要关注渐进式泄漏 - 在程序运行时可以/将逐渐泄漏更多内存,例如在循环内进行分配,以及没有释放那段记忆。
特别是对于那些真正需要一些内存来保留分配给程序整个生命周期的东西,退出之前释放和离开分配直到退出完成之间的区别之间的区别变得更像是一个真正有用的分裂问题区别。有些人认为分配内存是一种讽刺,即使它只是在退出之前立即释放。其他人将其视为浪费代码(以及对bug的邀请),以便在退出之前立即释放内存(当任何设计合理的操作系统将重新获得进程和资源时)。
答案 1 :(得分:2)
因为程序一分配就会退出,那么linux(或windows)会自动free
那个内存空间,所以没有泄漏,但你要在malloc
之后和程序结束之前做一些事情然后会有泄漏
答案 2 :(得分:2)
这将由valgrind和Intel Inspector报告为内存泄漏,因为未释放分配的内存。但是,这可能不会对该计划产生影响。
如果在程序退出之前需要分配内存,则可以避免此泄漏警告。但设计必须指明不释放不会导致其他问题,如内存不足。例如,可能存在一些控制器对象的单例实例,只要程序运行就必须存在。
但是,如果此类分配丢失且从未使用过,而设计不考虑它们,那么它肯定是泄密。
现在,在你的情况下,这个分配的内存不用于何处。因此,这种分配必须被视为泄漏。
当程序退出时,OS可能会占用所有内存。当应用程序必须运行很长时间(如服务器应用程序)并且将存在很长时间并且将来会有大量维护时,这不应该被视为理所当然。
答案 3 :(得分:1)
是的,程序中存在内存泄漏。你正在分配一个大小为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;
}