gpt4 book ai didi

c++ - 如何使用指针在随机地址上操作?

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:37 25 4
gpt4 key购买 nike

我同时运行两个独立的程序。

*在第一个中,我动态分配一个整数并检索它的地址。

*在第二个中,第一个仍在运行时,我使用第一个中生成的地址来访问第二个程序中第一个程序中分配的指针处的值。

但是第二个程序总是崩溃。

我的问题是 - 我可以使用指针从另一个程序访问一个程序的变量吗?
他们应该可以通过访问他们的地址来访问。不应该吗?

这是第一个程序的代码:-

//Program 1
#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
int *p;
p= new int; //allocating an integer
*p=15; //setting up a value.
getch();
int x=(int)p; //retrieving the address and converting it to decimal system.
cout<<*p<<endl<<p<<endl<<x; //printing assigned value and address to use in second program
getch();
delete p;
}

输出是这样的……

 15
0xfc13a8
16520104

现在,当它仍在运行时(指针尚未删除,使用 getch 函数暂停)我启动第二个程序,其代码是这样的..

 //Program 2
#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
int *p;
int x;
cout<<"Enter an address:-";
cin>>x;
cout<<endl;
p=(int *)x;
cout<<*p;
getch();
}

它询问地址,我输入第一个程序给出的地址16520104,然后我尝试在该地址显示分配的值,但程序总是崩溃?为什么会这样??

最佳答案

对于大多数平台,内存为 Processes are isolated彼此(不同 address space )。

此外,即使它们在同一个进程中(或者您的平台允许进程读取彼此的内存),您正在做的是 Undefined behavior因为:

不能保证指针适合 int。保证保存数字指针值的类型是 std::uintptr_t . (当然,您可以使用宽度更大的其他类型)。


如果您正在使用这些流行平台中的任何一个,那么默认情况下进程是隔离的。引用自Wikipedia :

Notable operating systems that support process isolation:

  • Unix, Linux, OS X
  • VMS
  • Microsoft Windows from Windows NT 3.1

您最有可能寻找的是某种形式的 Interprocess Communication

关于c++ - 如何使用指针在随机地址上操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com