首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于非法寻址的有关问题

2012-03-04 
关于非法寻址的问题没事瞎试着玩先打了这么段代码:int*a0intca&c在return这里设中断看内存,但到a的内

关于非法寻址的问题
没事瞎试着玩
先打了这么段代码:
                  int*   a   =   0;
int   c;
a   =   &c;
在return这里设中断看内存,但到a的内存地址是0x0012FEC8,于是在后面加了句,变成
int*   a   =   0;
int   c;
a   =   &c;
*(0x0012FEC8)   =   1;
然后再编译的时候报错,说非法寻址.我再把*(0x0012FEC8)   =   1;这行注释掉,同样看在return设中断看内存a的地址,还是这个地址0x0012FEC8.
我再用
int*   a   =   0;
int   c;
a   =   &c;
                  unsigned   long   b   =   (unsigned   long)a;
                  *((int   *)b)   =   1;
这样没问题,变量c的内容变成1.
为啥*(0x0012FEC8)   =   1;不行?


[解决办法]
哦应该这样没有问题
*((int *)(0x0012FEC8))=1;
[解决办法]
如果非要直接使用数值作为地址,使用:

*((int *)0x0012FEC8) = 1;

编译器不能那么智能的解析你的写法

:P


[解决办法]
其实编译器要进行这样的操作(指针运算符*)需要一个信息,那就是是什么类型,并且依此来决定访问多大的内存

热点排行