转换为void指针后从char数组中读取int值

时间:2014-05-23 16:07:29

标签: c++

我正在尝试构建通用数据类型的内存块,但是在打印结果时我得到了垃圾。

void Read(void* _data, size_t _size, int _position) const
{
    char* data = new char[_size];
    memcpy(data, m_data + _position - _size, _size);
}

void Write(void* _data, size_t _size, int _position)
{
    char* data = new char[_size];
    memcpy(m_data + _position, data, _size);
    return 1;
}

int main()
{
    Chunk c(10);
    int value = 10, result;

    c.Write(&value, sizeof(int), 0);
    c.Read(&result, sizeof(int), sizeof(int));
    cout << *((int *)result) << endl;
    return 0;
}

我做错了什么?

2 个答案:

答案 0 :(得分:3)

&#34;我做错了什么?&#34; - 几乎所有东西:

首先,ReadWrite函数都以内存泄漏结束,因为data局部变量指向的分配内存是&#34;丢失&#34; (没有人&#34;知道&#34;函数返回后的地址)。

此外,您期望通过投射(int*)result获得什么?它肯定不会是一个有效的内存地址,您可以使用*((int*)result)安全地取消引用。

答案 1 :(得分:0)

在您的阅读功能中,未使用参数_data,因此无法修改任何内容。它应该是:

void Read(void* _data, size_t _size, int _position) 
{
  memcpy(_data, m_data + _position - _size, _size);
}

此外,输出变量result的代码没有意义,应该只是:

cout << result << endl;

由于该计划不是完整的计划,我不知道是否还有其他错误