首页 > 解决方案 > 从另一个应用程序通过其地址访问变量失败

问题描述

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

所以在我的树莓派中,我创建了一个变量

#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;
              ^~~~~~~~

有人可以向我解释如何做到这一点

标签: pointersdynamicheap-memorymemory-address

解决方案


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

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

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

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

推荐阅读