int *a=500;
*a=3;
printf("%d",*a);
查看上面的代码。
我想将内存的地址500设置为3.但是当我编译此代码时,我得到一个错误(分段错误)。有什么问题?
答案 0 :(得分:3)
这是无效的:
int *a=500;
你不能只是将一个任意地址分配给指针变量,并期望它指向任何有用的地方。您只能在具有明确定义的特定设备地址的嵌入式平台上执行此类操作。
您只能分配现有变量的地址或内存分配函数返回的地址,如malloc
:
int b;
int *a = &b; // valid
int *c = malloc(sizeof(int)); // valid
int *d = 500; // not valid
答案 1 :(得分:1)
因为您有异常意味着您在操作系统下运行它。 写入地址500很可能超出了您的进程内存映射和堆栈外。
幸运的是内存保护单元,不允许你在任何你想要的地方写字。