【问题标题】:Is it possible to input an address to a pointer from stdin?是否可以从标准输入向指针输入地址?
【发布时间】:2017-05-25 06:34:22
【问题描述】:

不久前,我有一个简单的进程间通信的想法:一个进程将地址输出到指针,我将其复制到另一个进程的输入,然后更改原始变量。

我是这样实现的:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    bool p;
    cin>>p;
    if(p){
        int n;
        n=0;
        cout<<&n;
        cin.get();
            cin.get();
            cout<<n;
        }else{
            int *point,n;
            scanf("%p",&point);
            cout<<point;
            cin>>n;
            *point+=n;
        }
        return 0;
    }

我使用 scanf 是因为 cin 抱怨,并且无法编译。我试图用两个进程运行它,但是在我启动第二个实例并输入指针的地址后,如第一个输出的那样,它冻结了。由于我只能访问 Windows,我不知道它是否获得了 SIGSEGV,或者它是否做了一些完全不同的事情。

是我试图改变另一个进程的变量的值导致它崩溃,还是其他什么东西阻止了我?

【问题讨论】:

标签: c++ windows interprocess


【解决方案1】:

您不能这样做,因为第一个进程将无法访问第二个进程的内存地址空间(在常见的操作系统中,包括 Windows 和 Linux)。

【讨论】:

  • ^ 在某些操作系统中,就是​​这样。 OP 的想法适用于 MS-DOS
  • 谢谢,我将其添加到我的答案中以使其更准确。
【解决方案2】:

每个进程都有自己的内存,与其他进程完全分开。一个指针值在不同进程的上下文中是没有意义的,即使你设法让它通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2011-01-08
    • 1970-01-01
    • 2015-12-25
    • 2018-02-21
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多