这是具有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的值。但是它们是不正确的,并且包含随机数。我确定我碰到了错误的内存位置。但不知道在哪里。
答案 0 :(得分:3)
std::vector
对象不是数组对象。向量管理动态分配的数组。就像您的ptr
不是数组,而是指向一个数组。
就像您没有将&ptr
传递给malloc
(那样会导致数据写在指针而不是指针数组上)一样,您也不要传递{{ 1}}(因为这将导致数据从管理数组的向量中读取,而不是从正在管理的数组中读取)。向量具有成员函数&nv
,该函数返回指向内部数组的指针。