关于malloc(0)的对与错

大家都知道malloc(-1)是错的,但是malloc(0)到底是对还是错呢?


在以前我也没有考虑过,只知道malloc(0)是没有申请任何空间的,是没法往里面写入东西的,但是我在linux上和window编译时却让我出乎意料,它既然没有报错,可以输入和输出,看一个例子大家就知道了:


window上运行结果:


linux上运行结果:




我一直在想为什么会能正确的输入和输出,是自己很苦恼,按道理说它是错的,让自己很苦恼

经过查找资料终于明白了,原来

char* p = (char *) malloc (0);

代码也能通过编译,但事实上只分配了0个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归

结果是后面的内存中原有数据内容被改写。这样做是很危险的。

这种错误也可以自己测试出来,虽然写入动态空间,但是在释放动态空间是没法释放的,因为free函数不能释放别人的空间。


你们可以发现上面的程序申请动态内存后都没有释放,这样才导致了错误的出现


正确代码是:


总结:在写代码是申请了动态内存一定要及时释放,否则会出现内存泄漏,虽然短时间内没法发现,但是他是一个潜在危险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值