小编Nat*_*eke的帖子

将结构复制到数组的一个元素中

在我正在编写的代码中,我需要执行以下操作:

  1. 创建一个映射,其中每个值都是固定大小的缓冲区
  2. 使用 memcpy 用一些本地定义的对象填充映射的一个值的一个元素(即数组的一个元素本身就是映射的值)

以下代码是该概念的一个小示例:

#include <iostream>
#include <map>
#include <cstring>

int main()
{
    struct hdr {
        int cpi_length = 42;
    } ;

    void* this_hdr = new hdr;
    std::map<int, hdr(*)[20]> SP;
    std::cout << sizeof(hdr) << std::endl; // "4"
    std::cout << sizeof(this_hdr) << std::endl; // "4"
    std::cout << sizeof(SP[0][0]); // "80"
    std::memcpy(SP[0][0], this_hdr, sizeof(hdr)); // "Error: access violation"
    std::cout << SP[0][0]->cpi_length;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给我带来了两个问题:1)如何解决尝试使用 memcpy 时的运行时错误,2)一旦解决了错误,我如何确保此代码将执行我所描述的操作?

如命令所示sizeof,被复制的结构实例的大小与结构本身相同,并且(显然)比它被复制到的数组元素的大小小得多。那么为什么会出现访问冲突呢?应该有足够的空闲空间。

我知道为什么我会memcpy在这个实例中使用,为什么我要使用缓冲区指针而不是向量等,这可能看起来很愚蠢。这只是一个可重现的示例,请理解在实际代码中我仅限于这些实现选择。现在,我不再假设我只是犯了一些简单的错误,例如在引用/取消引用指针时混淆了语法。

c++ dictionary pointers memcpy

0
推荐指数
1
解决办法
78
查看次数

标签 统计

c++ ×1

dictionary ×1

memcpy ×1

pointers ×1