首页 > 代码库 > 关于malloc(0)的对与错
关于malloc(0)的对与错
大家都知道malloc(-1)是错的,但是malloc(0)到底是对还是错呢?
在以前我也没有考虑过,只知道malloc(0)是没有申请任何空间的,是没法往里面写入东西的,但是我在linux上和window编译时却让我出乎意料,它既然没有报错,可以输入和输出,看一个例子大家就知道了:
window上运行结果:
linux上运行结果:
我一直在想为什么会能正确的输入和输出,是自己很苦恼,按道理说它是错的,让自己很苦恼
经过查找资料终于明白了,原来
char* p = (char *) malloc (0);
代码也能通过编译,但事实上只分配了0个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归
,结果是后面的内存中原有数据内容被改写。这样做是很危险的。
这种错误也可以自己测试出来,虽然写入动态空间,但是在释放动态空间是没法释放的,因为free函数不能释放别人的空间。
你们可以发现上面的程序申请动态内存后都没有释放,这样才导致了错误的出现
正确代码是:
总结:在写代码是申请了动态内存一定要及时释放,否则会出现内存泄漏,虽然短时间内没法发现,但是他是一个潜在危险。
关于malloc(0)的对与错
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。