《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