我有一个u_char数组,每次进入循环时都会更改,并且有一个成员作为u_char数组的结构。我正在尝试创建一个结构向量,包含u_char数组的所有迭代。但我得到一个段错(当我使用memcpy时)或相同的值重复(当我没有)。救命?这是代码
u_char * data; //contains the data I want to copy from each iteration
unsigned char mem1[bytes];
for(int i=0; i<bytes; i++) {
mem1[i] = data[i];
}
struct load l1; //contains one member (pload of type u_char*)
l1.pload = mem1; //this gives me the same value in all elements of the vector
//I also tried using memcpy, like this:
//memcpy(&l1.pload, mem1, bytes); //this gave me a segfault
recd.push_back(l1) //recd is a std::vector<load>
我这样打印出来:
for(std::vector<load>::iterator it1 = recd.begin(); it1 != recd.end(); ++it1) {
cout<<"\nhere\n"<<endl;
cout<<it1->pload<<endl;
}
答案 0 :(得分:0)
你在memcpy
中得到了Steve-o和hmjd在评论中所说的分段错误:li.pload
可能只是一个指针,它并没有指向它自己的任何空间,所以{ {1}}失败。根据您的编译器,它是未初始化的,或指向0x0,在任何一种情况下,复制到该应该正确地导致该错误。
memcpy
可以成为一个指针。诀窍是,li.pload
每次都应该指向新的有效数据:
mem1
然后你的for循环(可以用`u_char * mem1 = new u_char[bytes];`
代替)将正常工作,你可以保留memcpy
,因为你每次都会存储一个指向不同内存区域的指针。就像现在一样,每个l1.pload = mem1
指向相同的内存区域,这就是为什么你在每个记录中看到相同的值。
当然,由于您正在分配内存,因此当您完成向量时,您必须记住为向量中的每个li.pload
删除pload
。