c语言考试题及答案malloc,C语言笔试题【qianlong】 Part A  1. ptr = (char *)malloc(0)...

Part A:

1.

What does the code fragment output and why?

char *ptr;

if((ptr=(char *)malloc(0))==NULL)

puts("Got a null pointer");

else

puts("Got a valid pointer");

解题第一步:读懂代码,首先要知道malloc()的作用:

a4c26d1e5885305701be709a3d33442f.png

而malloc(0)有意味着什么呢?是否就等同于NULL呢?

答案是否定的:

malloc(0)即是:分配的空间为0

,但是分配的空间为0不等于NULL,

我们可以这么理解:当执行代码malloc()时,系统在堆区【1】中分配相应一小块内存,其中包含两部分:记录头部和可用内存。由于是0,所以可用内存为0,但是记录头部仍然存在。

而NULL没有任何实体,也就不存在记录头部和可用内存了。

所以NULL不同于malloc(0)

即定义的字符型指针虽申请内存为0,但是不为空。

所以输出结果为:Got a valid pointer

最后呈上代码和运行截图

代码:

#include

using namespace std;

int main()

{

char

*ptr;

if((ptr=(char *)malloc(0))==NULL)

//cout<

puts("Got a null pointer");

else

//cout<

puts("Got a valid pointer");

system("pause");

return

0; }

运行截图:

a4c26d1e5885305701be709a3d33442f.png

附录:

【1】程序运行时的内存占用

一个程序将操作系统分配其运行的内存块分成4个区域:

代码区: 存放程序的代码部分;

数据区: 存放程序的全局数据和静态数据;

堆区: 存放程序动态申请的数据;

栈区: 存放程序的局部数据和参数(不能用于返回值return语句);

为什么用malloc函数是在堆区上分配?

那是因为使用malloc或new函数是需要动态申请内存空间的,所以是在堆区上分配的,而且程序员要自己负责在不用试用free或delete释放内存,动态内存的生存期由我们决定,使用非常灵活,但问题也最多!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值