问题描述
我正在 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、写回、关闭和解锁。
- 使用一些现有的实用程序/系统工具来跟踪执行统计信息(我个人不知道,但它可能存在,具体取决于您运行的操作系统)。