我有一个代码,我通过了内存中的某个地方。内存中的这个地方指向一个数组
uint32_t *ps2 = NULL;
uint32_t src_address = 0x1ffffc3;
如何从此地址读取数组
的值?
我试着按如下方式转换它
*ps2 = (void *)src_address;
但它给了我一个错误:从‘void*’到‘uint32_t’的无效转换
问候,
最佳答案
你有两个问题:
首先,指针
ps2
是一个空指针,它不指向任何地方。这意味着您不能取消引用它。src_address
不是指针,但它确实应该是。
总而言之,您对指针及其使用方式的理解似乎有些困惑。
要让它工作,首先将 ps2
定义为不是指针:
uint32_t ps2;
然后定义src_address
作为一个指针:
uint32_t *src_address = (uint32_t *) 0x1ffffc3;
最后像普通指针一样取消引用 src_address
:
ps2 = *src_address;
可能存在第三个问题:src_address
的地址未针对 uint32_t
对齐。在某些系统上,未对齐的访问是无效的,并且会导致硬件异常。
关于c - 从已知地址访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55511293/