关于malloc和free的一点思考

来源:互联网 发布:光大证券软件下载 编辑:程序博客网 时间:2024/05/20 06:40

      《c和指针》中给了一个子函数,在子函数中用malloc分配了内存,但由于要将申请到的内存指针返回给main函数,所以没有在子函数中用free释放内存。 我误以为所谓的malloc以后一定要free是指在同一个函数中了,其实是指在整个程序结束前一定要在适当地方自己释放内存,否则在子函数结束后,系统不会自动回收分配在堆上的内存(但退出main函数以后操作系统肯定会收回所有资源),这样就造成了堆内存泄露。

       堆和栈的区别就在于此:

栈:函数执行结束时,系统自动释放存储单元。

堆:函数执行结束,编译器也不会释放存储单元,一定要我们自己控制。

#include "stdio.h"#include "string.h"#include "malloc.h"char* copy(char *oldStr);int main(){char origin[]="It is a testing programming";char *newStr;while(1){newStr=copy(origin);if(newStr!=NULL){//如果没有free,通过资源管理器可以看到内存占用量一直在增大//有了free,内存占用量保持不变free(newStr);printf("%s\n","succeed");}elseprintf("%s\n","fail");}return 0;}char* copy(char *oldStr){char *newStr=(char*)malloc(strlen(oldStr)+1);if(newStr!=NULL){strcpy(newStr,oldStr);return newStr;}return newStr;}

附关于内存管理、内存泄露的文章:http://www.cr173.com/html/18898_all.html

0 0
原创粉丝点击