#include <stdio.h>
int main()
{
int *p = 0;
*p = 1;
return 0;
}
这个函数哪里错了。
网上有说*p=1这句代码的作用是把数值1存入0这个地址,这个操作当然是非法的。
怎么个当然法呢?
首先定义了一个指针变量初始化并赋了地址空间,然后再将1的数值赋值给p指针指向的空间,应该没有什么问题啊。
编译通过,执行时报段错误,求解中!
0x00000000这样的地址数字也不行吗
追答不可以,这是windows系统规定的,用户不能直接访问内存单元,比如,0x0000000里是某个应用程序,你访问了不就造成信息外露或者恶意篡改了吗?
追问哦,忘了说了。我是linux环境,但你讲的道理是一样的,谢谢你,也谢谢大家!
0是不能被选来做地址吗?很多头文件里用到的的NULL就是0啊!
追答关键是0这个地址是没有实际意义的,你给人写信说送到 “xxx” (实际不存在) 可能吗?
你往里写东西其实是往内存里存数据, int* p = new int; 就相当于在内存里给你找了一个地址安家
p返回的就是这个地址的门牌号,然后你就可以送信,取信了
类似0x00000000这样的地址数字也不行吗
追答 你可以试试别的随机数字地址,有的可以有的不可以,这就涉及到进程在内存中的分布问题。
0x00000000 确实是一个内存地址,但是并不属于你的程序所管辖,可能是系统在用,也可能你程序中的其他部分在使用,你用别人家的东西肯定不可以了。 new 就相当于你自己买了块地,怎么搞都可以了