微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从另一个应用程序通过其地址访问变量失败

我正在 raspBerry pi 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;
              ^~~~~~~~

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

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。