代码之家  ›  专栏  ›  技术社区  ›  shreyas-badiger

memcpy从向量到空指针(反之亦然)不起作用

  •  -1
  • shreyas-badiger  · 技术社区  · 6 年前

    typedef struct{
        int a;
        int b;
    }node;
    

    将值插入到节点类型的向量中。

        vector <node> nv;
        node n;
    
        n.a = 10;
        n.b = 20;
        nv.push_back(n);
    
        n.a = 100;
        n.b = 200;
        nv.push_back(n);
    

    将向量复制到空指针。

        void *ptr = malloc(4096);
        memcpy((char*)ptr,&nv,sizeof(node)*2);
    

    从void指针读取值

        node *temp;
    
        temp = (node*)malloc(sizeof(node));
    
        int offset = 0;
        i = 0;
        while(i<n){
            memcpy((node*)temp,(char*)ptr + offset, sizeof(node));
            cout<<"a - "<<temp->a<<" b -"<<temp->b<<endl;
            offset += sizeof(node);
            i++;
        }
    

    我正在打印a和b的值。但它们是不正确的,并且包含随机数。我确信我打错了记忆的位置。但不知道在哪里。

    1 回复  |  直到 6 年前
        1
  •  3
  •   eerorika    6 年前

    std::vector 对象不是数组对象。向量管理一个动态分配的数组。就像你的 ptr

    &ptr malloc (因为这会导致数据被写在指针上,而不是指针数组),所以也不能传递 &nv (因为这样会导致从管理数组的vector读取数据,而不是从正在管理的数组读取数据)。向量有一个成员函数 data 返回指向内部数组的指针。