if ((ptr = (char *)malloc(0)) == NULL)
puts( "Got a null pointer ");
else
puts( "Got a valid pointer ");
上面程序在VC6.0下输出结果是:Got a valid pointer
请问指针为NULL时指向哪里,分配的空间为0时又指向哪里?
当使用malloc后,只有在没有足够内存的情况下会返回NULL,或是出现异常报告。
malloc(0),系统就已经帮你准备好了堆中的使用起始地址(不会为NULL)。但是你不能对该地址进行写然后释放内存的操作,如果写了话,当调用free(ptr)就会产生异常报告(地址受损)。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main ()
{
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");
*ptr = 'c';
printf("&ptr = %x\n",ptr);
printf("*ptr = %c\n",*ptr);
strcpy(ptr,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
printf("the string at %x is :%s\n",ptr, ptr); //这里可以复制一个很长的字符串
free(ptr); //这里会出错
}
NULL 一般预定义为 (void *)0,指向0地址。malloc是在程序堆栈上分配空间,不会是0地址
malloc(0)是指分配内存大小为零
NULL是不指向任何实体
malloc(0)也是一种存在不是NULL
联系客服