通过另一个应用程序的地址访问变量失败

Failure accessing a variable through its adress from another application

我正在 raspberry pi 4 上开发一个 Qt 应用程序,我想创建一个动态变量并在我的 Qt 应用程序中使用它,它是一个计数器,我不希望它成为在每次执行应用程序时重新初始化为零,我只想使用地址并在每次执行时增加值。

所以在我的raspberry pi中我创建了一个变量

#include<stdio.h>


int main (void)
{
        int *p;
        p = (int*)malloc(sizeof(int)); 
        *p=10;

        printf("%p",p);
        //free(p);
return 0;
}

我编译了它,这是输出,所以创建的变量地址是0xfa9150

pi@raspberrypi:~ $ gcc -Wall  impulsions.c -o impulsions
pi@raspberrypi:~ $ ./impulsions 
0xfa9150

在我的 Qt 应用程序中,我试图读取地址的值但无法读取

int* counter=new int;
    counter=0xfa9150;

    qDebug()<<"counter"<< *counter;
    delete counter;

我遇到了这个错误

error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
     counter=0xfa9150;
              ^~~~~~~~

谁能向我解释一下如何做到这一点

系统上不同进程(例如 Qt 应用程序和带有计数器的程序)的内存 space 大部分是不相交的。即使它们使用相同的地址 - 这些地址是 虚拟 ,而不是物理内存地址,并且在使用时会被转换(通常)为物理内存中的地址。

这意味着 Qt 应用程序没有,也不能访问另一个进程内存中的计数器变量 space。

所以...您将需要另一种方法。一些可能性:

  • Qt 应用程序通过某些套接字与您的监视器迷你应用程序通信。
  • 没有第二个进程,但 Qt 应用程序锁定了一个文件,打开该文件,从中读取当前计数器,加 1,写回,关闭并解锁。
  • 使用一些现有的 utility/system 工具来跟踪执行统计数据(我个人不知道,但它可能存在,具体取决于 OS 你 运行).