位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 内存丟失

提问人:刘团圆发布时间:2020-12-03

    因为free()函数的用处在于实时执行回收内存的操作,如果程序简单,当程序结束前不会使用过多内存,也就不会降低系统性能,那么也可以不用free()函数去释放内存。当程序结束后,操作系统会完成释放的功能。

    但如果在开发大型程序时不写free()函数后果会很严重。因为可能在程序中要重复分配一万次10MB的内存,如果每次分配内存后都使用free()函数释放用完的内存空间。那么这个程序只需使用10MB内存就可以运行。但是如果不使用free()函数,那么就要使用100GB的内存!这其中包括绝大部分的虚拟内存,而由于虚拟内存的操作需要读写磁盘,会极大影响系统性能,甚至导致系统崩溃。

    因此,在程序中编写malloc()函数分配内存时都对应地写出一个free()函数进行释放,是一个良好的编程习惯。这不但体现在处理大型程序时的必要性,也在一定程度上体现程序优美的风格和健壮性。

    但是,有时常常会有将内存丟失的情况,例如:

    p01d=(int*)malloc(sizeof(int));

    pNew=(int*)malloc(sizeof(int));

    这两段代码分别表示创建了一块内存,并将内存的地址传给了指针pOld和pNew,此时指针pOld 和pNew分別指向两块内存。如果进行pOld=pNew操作,pOld指针就指向了pNew指向的指针地址。这时再进行free(pOld);释放内存的操作,此时释放pOld所指向的内存空间是原来pNew指向的,于是这块空间被释放了。但是pOld原来指向的那块内存空间还没有被释放,不过因为没有指针指向这块内存,所以这块内存就丟失了。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部