c++ - 转换为 void 指针后从 char 数组读取 int 值

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

我做错了什么?

最佳答案

“我做错了什么?” - 几乎所有内容:

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

此外,您希望通过转换 (int*)result 得到什么?它肯定不会是一个有效的内存地址,您可以使用 *((int*)result) 安全地解除引用。

关于c++ - 转换为 void 指针后从 char 数组读取 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833860/

相关文章:

c++ - 如何确定 STL 容器中的最后一个有效元素

c++ - 如果构造函数内部的其他实例化失败,构造是否失败

c++ - 如何使用包含空值的 char* 初始化 std::string

c++ - 读取不确定值是未定义的行为吗?

c++ - 返回真还是返回假?魔法

c++ - 如何在 C++ 中使用自定义类型作为映射的键?

c# - 是否有开放源代码项目在无异常(exception)的情况下实现相同的功能?

javascript - 将对象+骨架从 blender 导出到 Threejs 并手动移动骨骼

c++ - 如何为嵌套指针结构动态分配内存?

c++ - 是否(或将会)在 lambda 表达式中使用熟悉的模板语法?