关于free()函数的重要性和内存泄漏

静态内存的数量在编译时是固定的,在程序运行期间也不会改变。自动变量使用的内存数量在程序运行期间自动增加或者减少。但是动态分配的内存数量只会增加,除非使用***free()***函数进行释放。例如,假设有一个创建数组临时副本的函数,其代码框架如下:

int main()
{
    double glad[2000];
    int i;

    for(i = 0;i < 1000;i++)
    {
        gobble(glad,2000);
    }
}

void gobble(double array[],int n)
{
    double * temp = (double *) malloc(n * sizeof(double));
    /*free(temp);*///假设忘记使用free()函数释放
}

第一次调用gobble()函数时候,他创建了指针temp;并且调用malloc()分配了16000字节的内存(假设double为8个字节)。假设代码如代码块所示,遗漏了free()函数,当函数结束时,作为自动变量的指针temp也会消失,但是他指向的16000个字节的内存却任然存在。由于temp指针已经被销毁了所以无法访问这块内存,他也不能被重复使用,因为代码块中没有调用free()释放这块内存。
第2次调用gobble()函数时候,他又创建了temp指针,并且调用malloc()函数分配了16000字节的内存。第一此分配的16000字节内存已经不能再使用,所以malloc()分配的另外一块16000字节的内存,当函数结束的时候,该内存块也无法被再次访问和使用。
循环要执行1000次,所以再循环结束时,内存池中有1600万字节被占用。实际上,也许在循环结束之前就已经耗尽了所有的内存。这类问题被称之为内存泄漏(memory leak)。在函数末尾处调用free()函数可以避免这类问题的发生。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值