我正在尝试构建通用数据类型的内存块,但在打印结果时出现垃圾。
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;
}
我做错了什么?
最佳答案
“我做错了什么?” - 几乎所有内容:
首先,Read
和 Write
函数都以内存泄漏结束,因为 data
局部变量指向分配的内存是“丢失”的(没有人“知道”函数返回后的地址)。
此外,您希望通过转换 (int*)result
得到什么?它肯定不会是一个有效的内存地址,您可以使用 *((int*)result)
安全地解除引用。
关于c++ - 转换为 void 指针后从 char 数组读取 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833860/