码迷,mamicode.com
首页 > 其他好文 > 详细

关于malloc(0)的对与错

时间:2014-11-16 14:47:55      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:指针   内存泄漏   linux   

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


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


window上运行结果:bubuko.com,布布扣


linux上运行结果:

bubuko.com,布布扣



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

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

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

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

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

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


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


正确代码是:bubuko.com,布布扣


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

关于malloc(0)的对与错

标签:指针   内存泄漏   linux   

原文地址:http://blog.csdn.net/guoqianqian5812/article/details/41171893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!