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

memcpy from a vector to void pointer (vice-versa) not working

本文关键字:反之亦然 不起作用 memcpy 向量 空指针      更新时间:2023-10-16

这是具有 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 的值。但它们不正确并且包含随机数。我确定我击中了错误的内存位置。但不确定在哪里。

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

就像你不会将&ptr传递给malloc一样(因为这会导致数据被写入指针,而不是尖锐数组(,你也不会传递&nv(因为这会导致数据从管理数组的向量读取,而不是从正在管理的数组中读取(。Vector 有一个成员函数data它返回指向内部数组的指针。