C++ 如何在c++;?
晚上好 我打开了Visual Studio 2012并运行程序来执行以下操作:C++ 如何在c++;?,c++,visual-studio-2012,memory-management,C++,Visual Studio 2012,Memory Management,晚上好 我打开了Visual Studio 2012并运行程序来执行以下操作: double x = 8768130; cout << &x; cin.get(); return 0; 但它产生了一个例外 Project2.exe中0x00A943DD处未处理的异常:0xC0000005:访问冲突读取位置0x003CFBF8。 这是什么意思?我没有权限?我做错事了 Value如何工作。这就是为什么我想: 打开第一个程序,初始化变量,写入
double x = 8768130;
cout << &x;
cin.get();
return 0;
但它产生了一个例外
Project2.exe中0x00A943DD处未处理的异常:0xC0000005:访问冲突读取位置0x003CFBF8。
这是什么意思?我没有权限?我做错事了
<如果你问我为什么要这么做,我正在从一些书中学习C++,我想看看<>代码> Value如何工作。这就是为什么我想:
- 打开第一个程序,初始化变量,写入它的地址李>
- 打开第二个程序并修改与之相关的书面地址
- 在第一个程序中写入变量以检查是否一切正常
如果你只想玩<代码> Value(内存可能会从你的下方改变),你应该考虑生成另一个线程,它周期性地修改一个全局可访问的变量。
现代平台,所以一些虚拟内存地址随机化(主要是出于安全原因)。除此之外,没有什么可以说在不同的过程中,一个文本常量的地址应该是相同的。所以可能只是在第二次运行时,地址是不允许读取的。第一个程序仍在运行:它正在等待我,因为'cin.get();',然后我打开第二个程序来修改地址。或者这不重要?在这种情况下,它更简单(并由@jonathonReinhart回答。)@Kusavil再次强调,不,不是来自另一个过程。您可以从同一进程(可能是从另一个线程)或使用调试API对其进行修改。OP让我想起了我自己以及我早期编程时的那些实验,我不禁泪流满面:')加油!我能不能把它公之于众,这样就有可能读到这篇文章?还是以某种方式强制执行?或者以其他方式编写?进程间通信或其他客户机-服务器设计可能是合适的。但是,由于我们不知道您真正想用这个值做什么,很难说什么可能是最好的。@Kusavil您可以导出变量,并使用GetProcAddress()@Nighthawk441从另一个进程中找到它,这是完全错误的。您不能直接访问另一个进程的内存。@Jonathon Reinhart这取决于他想做什么,但他并没有具体说明。 double* ptr = reinterpret_cast<double*>(0x003CFBF8);
cout << *ptr;