Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;?_C++_Visual Studio 2012_Memory Management - Fatal编程技术网

C++ 如何在c++;?

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如何工作。这就是为什么我想: 打开第一个程序,初始化变量,写入

晚上好

我打开了Visual Studio 2012并运行程序来执行以下操作:

    double x = 8768130;
    cout << &x;

    cin.get();
    return 0;
但它产生了一个例外

Project2.exe中0x00A943DD处未处理的异常:0xC0000005:访问冲突读取位置0x003CFBF8。

这是什么意思?我没有权限?我做错事了

<如果你问我为什么要这么做,我正在从一些书中学习C++,我想看看<>代码> Value如何工作。这就是为什么我想:

  • 打开第一个程序,初始化变量,写入它的地址
  • 打开第二个程序并修改与之相关的书面地址
  • 在第一个程序中写入变量以检查是否一切正常
。。。我打开了另一份Visual Studio

这就是你的问题所在。所有现代系统都使用,这意味着一个进程不允许接触另一个进程的虚拟地址空间。这是由处理器强制执行的

您可以在同一个过程(程序)中执行此操作。然而,现代操作系统也支持ASLR(地址空间布局随机化),这意味着每次执行程序时,一段代码或数据可能会加载到不同的虚拟地址

如果你想访问另一个进程的内存,最好的办法可能是使用你的操作系统。特别是在Windows上,您可以调用


如果你只想玩<代码> Value(内存可能会从你的下方改变),你应该考虑生成另一个线程,它周期性地修改一个全局可访问的变量。

现代平台,所以一些虚拟内存地址随机化(主要是出于安全原因)。除此之外,没有什么可以说在不同的过程中,一个文本常量的地址应该是相同的。所以可能只是在第二次运行时,地址是不允许读取的。第一个程序仍在运行:它正在等待我,因为'cin.get();',然后我打开第二个程序来修改地址。或者这不重要?在这种情况下,它更简单(并由@jonathonReinhart回答。)@Kusavil再次强调,不,不是来自另一个过程。您可以从同一进程(可能是从另一个线程)或使用调试API对其进行修改。OP让我想起了我自己以及我早期编程时的那些实验,我不禁泪流满面:')加油!我能不能把它公之于众,这样就有可能读到这篇文章?还是以某种方式强制执行?或者以其他方式编写?进程间通信或其他客户机-服务器设计可能是合适的。但是,由于我们不知道您真正想用这个值做什么,很难说什么可能是最好的。@Kusavil您可以导出变量,并使用GetProcAddress()@Nighthawk441从另一个进程中找到它,这是完全错误的。您不能直接访问另一个进程的内存。@Jonathon Reinhart这取决于他想做什么,但他并没有具体说明。
    double* ptr = reinterpret_cast<double*>(0x003CFBF8);

    cout << *ptr;