我正在尝试构建通用数据类型的内存块,但是在打印结果时我得到了垃圾。
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;
}
我做错了什么?
答案 0 :(得分:3)
&#34;我做错了什么?&#34; - 几乎所有东西:
首先,Read
和Write
函数都以内存泄漏结束,因为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;
由于该计划不是完整的计划,我不知道是否还有其他错误