问题:
int *ptr;
if(((char *)malloc(0))==NULL)
{
printf("got a null val");
}
else
{
printf("got a real val");
}
问:会输出打印什么信息?
输出会是:got a real val
原因分析:
在使用malloc(SIZE)的时候,实际使用的内存量是大于SIZE的。有人也许会问为什么?
我们看一个完整的:
首先 ptr=(char*)(malloc(SIZE))
最后需要 free(ptr)。那么我想说的是:为什么在free的时候只要传入ptr 系统就知道你要释放多少内存?它只是知道了开始释放内存的开始地址,为什么他会释放SIZE个字节的大小?
原因是在malloc(SIZE)的时候,其实申请的内存大小是SIZE+内存信息描述;
这个内存信息描述是占空间的。(它需要知道你申请了多少个字节的空间)。所以在你free的时候只要告诉它开始地址就行了,它会知道需要释放多少空间的,其原因就在信息描述。
所以malloc(0),其实占用了内存空间的 它返回不是NULL;所以在这里他的输出是:got a real val