c语言malloc函数

(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))
如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
问题:
int * p = (int *)malloc(10);
//我如果为整形数组p分配10个字节;
p[0] = 0;p[1]= 1;p[2]=2;
printf("%d%d%d\n", sizeof(p[0]),sizeof(p[1]),sizeof(p[2]));
//为p数组分配三个元素输出为4  4  4,那不是有12个字节了吗?
//请帮我解释一下,谢谢!!!!!!!!
malloc函数为p分配空间有什么用;p也不受malloc限制吗;
回答:
是这样,你的确用malloc分配了10个字节的空间,但你后来p[2]赋值时因为Int占四个四节,于是p[2]的首地址是你分配的10个字节的第九个字节的地址,于是你往里面写入数据,以为是Int类型,于是会超出你所分配的10个字节,多出两个字节,而这两个字节并没有被申请,而是写入了“邻居”的地址,但是你这样输出printf("%d%d%d\n", sizeof(p[0]),sizeof(p[1]),sizeof(p[2]));
sizeof(p[2])其实相当于sizeof(int),于是输出是4,
所以建议你要正确的使用malloc
如下
int* p = (int *) malloc ( sizeof(int) * 10 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值