memcpy из векторного указателя в void (наоборот) не работает - PullRequest
0 голосов
/ 10 октября 2018

Это структурный узел с 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);

Чтение значений из пустого указателя

    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 голосов
/ 10 октября 2018

std::vector объект не является объектом массива.Вектор управляет динамически размещаемым массивом.Точно так же, как ваш ptr не является массивом, он просто указывает на единицу.

Так же, как вы не должны передавать &ptr на malloc (так как это приведет к записи данных поверхуказатель, а не остроконечный массив), поэтому вы также не должны передавать &nv (поскольку это приведет к чтению данных из вектора, который управляет массивом, а не из массива, которым управляют).Вектор имеет функцию-член data, которая возвращает указатель на внутренний массив.

...