-1

我有一个 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;
} 
4

1 回答 1

0

memcpy对于 Steve-o 和 hmjd 在评论中所说的话,你会得到一个分段错误:li.pload可能只是一个指针,它没有指向它自己的任何空间,所以memcpy失败了。根据您的编译器,它未初始化或指向 0x0,在任何一种情况下,复制到该位置都应该正确导致该错误。

只是li.pload作为一个指针是可以的。诀窍是,mem1每次都应该指向新的有效数据:

`u_char * mem1 = new u_char[bytes];`

然后你的 for 循环(可以被memcpy那里替换)将正常工作,并且你可以保留你的l1.pload = mem1,因为你每次都将存储一个指向不同内存区域的指针。就像现在一样,每个li.pload都指向相同的内存区域,这就是您在每条记录中看到相同值的原因。

当然,由于您正在分配内存,当您使用完向量后,您必须记住删除向量pload中的每个load

于 2013-03-18T14:39:47.370 回答