指针赋值为NULL不分配内存?

幽雾 2009-09-14 08:47:02
通过实验得知指针赋值为NULL应该是不分配内存的吧,要不然不会报错的,也不知道我分析的对否?请大家指点。。。

参考:

//把指针赋值为NULL,运行,报内存错误。。。
short *bufptr = NULL;
short var = 0x20;
*bufptr = var;

//这段就不用多说了,地球人都知道,典型的。。。
short *bufptr;
short var = 0x20;
*bufptr = var;

//这段才是好滴~~~~
short *bufptr = (short *)malloc(sizeof(short));
short var = 0x20;
*bufptr = var;
...全文
306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
JS_COA 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hpsmouse 的回复:]
分配内存与否与指针是否为零没有必然关系,指针仅仅负责保存地址,你就算给个捏造的地址也照单全收~
那个 NULL 其实是 0,绝大多数系统不会容忍你向零指针处写数据
[/Quote]
很有道理
lzy0001sl 2009-09-15
  • 打赏
  • 举报
回复
指针本身也是一个变量,当然会在栈上分配内存,但是这个地址中的内容是0(NULL)。
ljx87085210 2009-09-15
  • 打赏
  • 举报
回复
顶了
coolcoffee4051982 2009-09-14
  • 打赏
  • 举报
回复
顶了
sysu_satan 2009-09-14
  • 打赏
  • 举报
回复
在32位Windows,NULL指针分配的分区一般是0x00000000到0x0000FFFF,如果你的
进程中的线程试图读取该分区的地址空间的数据,或者将数据写入该分区的地址空间,那么
CPU就会引发一个访问违规。
所以说第一个程序段的错误和第二个还是不一样的。第一个是因为试图访问NULL指针的内存,访问违规。
loveour 2009-09-14
  • 打赏
  • 举报
回复
第一个是向地址为0的内存写入数据,当然会错。它指向0了,也就无所谓分配不分配内存了-能怎么分配呢?
指针使用可以去申请一块内存,也可以去指向存储的类型符合的地址~
2009-09-14
  • 打赏
  • 举报
回复
分配内存与否与指针是否为零没有必然关系,指针仅仅负责保存地址,你就算给个捏造的地址也照单全收~
那个 NULL 其实是 0,绝大多数系统不会容忍你向零指针处写数据
kouwenlong 2009-09-14
  • 打赏
  • 举报
回复
我这里不报错的。
感觉指针初始化为空也是正确的。
幽雾 2009-09-14
  • 打赏
  • 举报
回复
看来不给分数就没人回啊,伤心~~~~~自己顶个~~~~

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧