读书人

内存泄露?解决思路

发布时间: 2012-04-04 16:38:51 作者: rapoo

内存泄露?
C小菜鸟不懂 “内存泄露” 具体是什么 大家伙给说道说道呗 先谢过了……

[解决办法]
在编程时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内存,而不是在进程启动的时候就进行分配。然而,有效地管理这些内存同样也是非常重要的。在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。尤其是在碰到错误路径的情况下更是如此。
[解决办法]
1、申请的内存在程序终止时没有释放让系统回收,造成系统认为这块内存仍在使用,而实际上已经无从 管理,这种是失去管理形成的内存泄露。
2、申请的内存是要对齐的,比如32位系统是4字节对齐,64位系统是8字节对齐,频繁的申请后会形成申请内存间的碎片,这些浪费的也可以成为泄露,不过进程终止会得到释放。
3、对象不正确注销时,或者内存重复释放都导致管理的内存空间产生错误,形成的内存失管。
4、其他意外造成的失管。
[解决办法]

探讨
在编程时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内存,而不是在进程启动的时候就进行分配。然而,有效地管理这些内存同样也是非常重要的。在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当……

[解决办法]
最简单的是 你new或者malloc了一块内存,然后用一个指针保存这块内存的地址,结果你把这个指针搞成了NULL,那么内存就泄露了
int* p1=(int* )malloc(sizeof(int)*20);
开劈了一块20个int大小的内存。
结果你一下把p1=NULL;
那么这块内存你永远访问不了了,所以内存一直不能free();那么内存就泄露了。当然还有其他的方式google吧
[解决办法]
简单来说就是,开始的时候,你想要一块空间,然后系统分配了一块空间给你,但是你用完这块空间之后没有告诉系统你用完了,系统还是认为你还需要这块空间,这块空间就不会被分配给别人了,而你自己又认为你已经没有再使用这空间了。这个空间就是内存泄露了。可能在c语言的小程序里有一点泄露看不出什么问题,但是如果养成习惯,以后到实际开发的时候就会还以前欠下的债了。

读书人网 >C语言

热点推荐