一个段错误的问题

wlwlwl 2010-09-29 01:58:39
下述代码会产生一个段错误。是不是不能在程序中对显性指定地址的区域进行写操作,谢谢
char *p;
p=0x0;
*p=0x1;


...全文
139 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小魔菇 2010-09-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wlwlwl 的回复:]

p=0x33;赋予其他值也同样段错误,如何解释呢
[/Quote]

linux下一般的进程的入口地址是0x804800
也就是说0x0-0x804800这之间的区域都是不能被访问的
qq413187589 2010-09-29
  • 打赏
  • 举报
回复
编译器不一样!指针赋地址的方式也不一样!
starsmemory 2010-09-29
  • 打赏
  • 举报
回复
将常量直接赋值个指针,摆明就是野指针。0地址是不允许访问的。
wlwlwl 2010-09-29
  • 打赏
  • 举报
回复
p=0x33;赋予其他值也同样段错误,如何解释呢
luciferisnotsatan 2010-09-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hslinux 的回复:]

程序中可以对显性指定地址的区域进行写操作;

LZ的代码是对NULL指针进行赋值操作,当然出错了。
[/Quote]

正解
mao_pu_hua 2010-09-29
  • 打赏
  • 举报
回复
最好不要直接给指针赋值,不然会出现地址冲突,可能是系统自己的,可能已经分配给别人了,这样做不安全。
hslinux 2010-09-29
  • 打赏
  • 举报
回复
程序中可以对显性指定地址的区域进行写操作;

LZ的代码是对NULL指针进行赋值操作,当然出错了。
bobo364 2010-09-29
  • 打赏
  • 举报
回复
的确报错,0x0应改是操作系统接管的地址,普通用户动不了
#include<stdio.h>

int main()
{
char *p;
p=0x0;
*p=0x1;
system("pause");
return 0;
}
小魔菇 2010-09-29
  • 打赏
  • 举报
回复
进程的地址空间是被分成不同的段 如代码段 数据段 堆栈 还有内核空间
不同的段有不同的读 写 执行权限
lz的0x0地址是未被进程使用的地址 所以就会出现异常
justkk 2010-09-29
  • 打赏
  • 举报
回复
哦 你这样等价于
char *p = NULL;
*p = ...
能不段错误吗。。
ayw215 2010-09-29
  • 打赏
  • 举报
回复
有些地址空间是系统的,应用程序不鞥直接写
昵称很不好取 2010-09-29
  • 打赏
  • 举报
回复
有些内存单元操作系统是不让访问的
pengzhixi 2010-09-29
  • 打赏
  • 举报
回复
是的,最好不要这样。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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