C++ u_char*memcpy segfault--尝试了其他答案

C++ u_char*memcpy segfault--尝试了其他答案,c++,segmentation-fault,memcpy,C++,Segmentation Fault,Memcpy,我有一个u_字符数组,每次进入循环时它都会改变,还有一个结构,其中一个成员是u_字符数组。我试图创建一个结构向量,包含u_char数组的所有迭代。但是我要么得到一个segfault(当我使用memcpy时),要么得到相同的复制值(当我不使用memcpy时)。帮忙?这是密码 u_char * data; //contains the data I want to copy from each iteration unsigned char mem1[bytes]; for(int i=0; i&l

我有一个u_字符数组,每次进入循环时它都会改变,还有一个结构,其中一个成员是u_字符数组。我试图创建一个结构向量,包含u_char数组的所有迭代。但是我要么得到一个segfault(当我使用memcpy时),要么得到相同的复制值(当我不使用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>  
u_char*数据//包含我要从每次迭代中复制的数据
无符号字符mem1[字节];

对于(int i=0;i你在
memcpy
上得到了一个分段错误,因为Steve-o和hmjd在评论中说:
li.pload
可能只是一个指针,它没有指向自己的任何空间,所以
memcpy
失败。根据你的编译器,它没有初始化,或者指向0x0,在任何一种情况下,它都会复制到那个sh你会正确地导致那个错误

li.pload
只是一个指针没关系。诀窍是,
mem1
每次都应该指向新的有效数据:

`u_char * mem1 = new u_char[bytes];`
然后是for循环(可以用
memcpy
替换)可以正常工作,并且您可以保留
l1.pload=mem1
,因为每次都会存储指向不同内存区域的指针。现在,每个
li.pload
都指向相同的内存区域,这就是为什么您在每个记录中看到相同的值


当然,由于您正在分配内存,当您完成向量时,您必须记住为向量中的每个
加载
删除
pload

struct load
的定义是什么?如果
l1.pload
是文档中的
u字符*
,因此没有备份内存,那么
memcpy(&l1.pload,…)
将进行分段,因为
字节数
超过
sizeof(u_char*)
的4-8字节,而
memcpy(l1.pload,…)
的真正含义是分段,因为它不指向任何地方。在使用
memcpy()之前
您需要确保为
l1.pload
分配足够的内存。注意,您可以使用
std::vector
,因为您已经在别处使用了
std::vector
,并且避免任何显式的动态内存管理。谢谢!我不敢相信我没有意识到它只需要一个“新的”。谢谢!
`u_char * mem1 = new u_char[bytes];`