打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ptr = (char *)malloc(0)
char   *ptr;

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ptr = malloc(0*sizeof(char));(转载)
malloc()参数为0的情况
经典程序100例(71-80)
动态内存分配,地址对齐
C++内存管理
C语言 字符串常用函数 示例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服