关于非法寻址的问题
没事瞎试着玩
先打了这么段代码:
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
[解决办法]
其实编译器要进行这样的操作(指针运算符*)需要一个信息,那就是是什么类型,并且依此来决定访问多大的内存