在C中读取内存块

时间:2014-06-27 23:13:05

标签: c pointers memcpy void-pointers

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

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;
}

当然,由于缓冲区存在于函数堆栈中,我在返回时会失去对它的引用。

有关如何做的任何想法?我不允许教师修改函数参数,否则我会将&变量作为参数传递。

谢谢!

1 个答案:

答案 0 :(得分:5)

在这一行:

memcpy(&buffer,base+offset,size);
问题是你试图将一块内存复制到一个堆栈分配变量buffer,而不是这个变量指向的堆分配的内存块。解决方法是删除&

memcpy(buffer, base+offset, size);

否则您的代码就可以了。

UPDATE :不要忘记free()返回的缓冲区,以便分配的内存不会“泄漏”:)