大家都知道malloc(-1)是错的,但是malloc(0)到底是对还是错呢?
在以前我也没有考虑过,只知道malloc(0)是没有申请任何空间的,是没法往里面写入东西的,但是我在linux上和window编译时却让我出乎意料,它既然没有报错,可以输入和输出,看一个例子大家就知道了:
window上运行结果:
linux上运行结果:
我一直在想为什么会能正确的输入和输出,是自己很苦恼,按道理说它是错的,让自己很苦恼
经过查找资料终于明白了,原来
char* p = (char *) malloc (0);
代码也能通过编译,但事实上只分配了0个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归
,结果是后面的内存中原有数据内容被改写。这样做是很危险的。
这种错误也可以自己测试出来,虽然写入动态空间,但是在释放动态空间是没法释放的,因为free函数不能释放别人的空间。
你们可以发现上面的程序申请动态内存后都没有释放,这样才导致了错误的出现
正确代码是:
总结:在写代码是申请了动态内存一定要及时释放,否则会出现内存泄漏,虽然短时间内没法发现,但是他是一个潜在危险。
时间: 2024-11-04 03:02:56