首页 > 代码库 > 关于malloc(0)的对与错

关于malloc(0)的对与错

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


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


window上运行结果:


linux上运行结果:




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

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

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

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

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

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


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


正确代码是:


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

关于malloc(0)的对与错