C++编程:“该内存不能为‘read’”

来源:百度知道 编辑:UC知道 时间:2024/05/23 05:01:13
#include "iostream.h"
int main()
{
int a=9;
int *iptr=&a;
iptr=iptr+3888262;
*iptr=*iptr-1;
cout<<iptr<<endl;
return 0;
}
练习修改扫雷的剩余雷数,遇到无法写入问题,高手指点一下。
iptr=iptr+3888262;//这句是因为我不知道怎么吧地址放到指针中,所以通过计算,“a”的地址加上3888262就是扫雷数的地址,前面加上*就表示是"a"+了3888262,但我要确定内存啊。问题是在*iptr=*iptr-1; 运行到这就出错。
先打印出a的地址,再在计算器中用扫雷的地址减去a的地址,除以4,就得出了。(因为整形占4个字节)

iptr=iptr+3888262;
这句真危险,你知道它指到什么位置了么?很容易出错啊
自动变量a的地址是不确定的,所以算出来的iptr也是不确定的,你能告诉我3888262是怎么算出来的吗?
这样肯定不行啊。每个进程在内存的中的空间是由系统根据需要分配的,在用户态时只能访问自己进程的内存空间,越界访问会报非法读或非法写的错误,否则可以这样乱改的话,每个进程都完全暴露在别的进程面前,系统还有什么安全性可言啊。你可以用金山游侠之类的工具改。

#include "iostream.h"
int main()
{
int a=9;
int *iptr=&a;
iptr=iptr+3888262; //*iptr=*iptr+3888262; 改成这样的吧!!!!
*iptr=*iptr-1;
cout<<*iptr<<endl; //这里
return 0;
}

我看看