pointers - 从另一个应用程序通过其地址访问变量失败
问题描述
我正在我的树莓派 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,将其写回,关闭并解锁。
- 使用一些现有的实用程序/系统工具来跟踪执行统计信息(我个人不知道,但它可能存在,具体取决于您正在运行的操作系统)。
推荐阅读
- java - 如何使用appium将PC上的文件放在设备(Android)上的特定位置
- reactjs - 当状态改变时,React 不会用新的 props 重新渲染组件
- r - 特定列上 R 程序中的 BubbleSort
- scheduling - 内存中的 MassTransit 预定消息
- java - Android Studio 在运行 Gradle 时使用以下 JDK 位置
- python - 设置按钮的宽度会删除文本标签
- javascript - 使用 Intl.NumberFormat() 构造函数求和值
- c - 可变长度数组和动态内存分配有什么区别?
- c - 如何从C中的行中获取第一个和最后一个单词?
- go - 将 swaggo/http-swagger 与 julienschmidt/httprouter 一起使用时出现空白页