gpt4 book ai didi

c - C中读取内存块

转载 作者:太空狗 更新时间:2023-10-29 16:12:24 25 4
gpt4 key购买 nike

我有一个任务,我需要读取和写入一个内存块(预分配),为此,我需要实现两个函数:

memory_read(base,offset,size);
memory_write(base,offset,size,buffer);

到目前为止没有问题,我成功实现了写作部分。问题出在 memory_read 上。我需要它返回一大块数据(可能是 void*),然后我可以将它转换为我期望的任何外部数据并使用它。

举个例子。假设我已经为该内存编写了一个序列化结构。我想做这样的事情

void *variable;
variable = memory_read(pointer_to_where_it_is,offset,sizeof(some_structure);
(some_structure) variable // and use it for something

这就是 memory_read 所做的

void *memory_read(void *base, int offset, int size){
void *buffer;
buffer = malloc(size);
memcpy(&buffer,base+offset,size);
return buffer;
}

当然,因为缓冲区存在于函数堆栈中,所以我在返回时失去了对它的引用。

知道怎么做吗?老师不允许我修改函数参数,否则我早就将&variable作为参数传递了。

谢谢!

最佳答案

在这一行中:

memcpy(&buffer,base+offset,size);

问题是您试图将一 block 内存复制到堆栈分配变量 buffer 而不是该变量指向的堆分配内存块。解决方法是删除 &:

memcpy(buffer, base+offset, size);

否则你的代码没问题。

更新:不要忘记free() 返回的缓冲区,这样分配的内存就不会“泄漏”:)

关于c - C中读取内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com