[英]Using a void* as a buffer to store uint_32 variables acting as RAM memory. How to read and write to it?
我遇到的问题是针对使用分配了 N 个字节的 void* 模拟 RAM memory 的项目。 始终是 4 的倍数。其中一个要求是必须使用 void*,因此我无法使用 uint_32 或 char 来使用它。
这是电流
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdint.h>
int main(void) {
void* mem = malloc(4096); //allocate 4096 bytes
uint32_t* test1 = malloc(sizeof(uint32_t));
*test1=12344444;
uint32_t* test2 = malloc(sizeof(uint32_t));
*test2=56788888; //declaring some test values
memcpy(&mem, &test1, sizeof(uint32_t)); //I try to copy test1 to the start of void*
memcpy(&mem+sizeof(uint32_t), &test2, sizeof(uint32_t)); //I try to copy test2 next to test1
print(mem);
return 0;
}
我做了一个简单的打印来查看正在写入缓冲区的内容。
void print(void* buffer){
for(int i = 0; i<4096; i+=sizeof(uint32_t)){
printf ("%d ", *((uint32_t*)(buffer+i)));
}
}
问题是我在其中一些索引中得到了一些奇怪的值,并且在我执行第一个 memcpy 之后我的两个测试被一些奇怪的数据分开。
12344444 0 0 0 0 0 33 0 56788888
我在这里做错了什么? 还有另一种方法,同时仍然使用 void* 作为内存吗? 我需要做什么才能访问存储在第 n 个字节的变量?
谢谢
mem 和 test1 已经是目标缓冲区和源缓冲区的指针,所以这样做
memcpy(mem, test1, sizeof(uint32_t));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.