C语言malloc和free

本文讨论了C语言中内存管理的关键函数malloc和free。介绍了内存泄露的概念,即程序申请内存后未及时释放可能导致的问题。同时指出,虽然可以使用malloc申请超出物理内存的内存块,但free函数并不能直接将已使用的物理内存归还给操作系统。
以下有关C语言的说法中,错误的是________。
  • 内存泄露一般是指程序申请了一块内存,使用完后,没有及时将这块内存释放,从而导致程序占用大量内存。
  • 可以通过malloc(size_t)函数调用申请超过该机器物理内存大小的内存块。
  • 无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。
  • 可以通过内存分配函数malloc(size_t)直接申请物理内存。

解答:D
malloc申请的是虚拟内存,而不是物理内存。
内存泄漏:用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。
直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。
malloc:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL
当内存不再使用时,应使用free()函数将内存块释放。
与new的区别
在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小
第一、malloc 函数返回的是 void * 类型。
对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给
int * 类型变量”。
所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,
建议养成强制转换的习惯。
第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。
在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;
但是在某些系统中是不允许malloc(0)的。

可以参考网上一篇博客对malloc和free的讲解:C语言malloc和free【转载】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值