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

时间:2018-10-10 15:25:29

标签: c++ pointers vector memcpy

这是具有2个变量的结构节点。

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 个答案:

答案 0 :(得分:3)

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

就像您没有将&ptr传递给malloc(那样会导致数据写在指针而不是指针数组上)一样,您也不要传递{{ 1}}(因为这将导致数据从管理数组的向量中读取,而不是从正在管理的数组中读取)。向量具有成员函数&nv,该函数返回指向内部数组的指针。