C++ u_char*memcpy segfault--尝试了其他答案
我有一个u_字符数组,每次进入循环时它都会改变,还有一个结构,其中一个成员是u_字符数组。我试图创建一个结构向量,包含u_char数组的所有迭代。但是我要么得到一个segfault(当我使用memcpy时),要么得到相同的复制值(当我不使用memcpy时)。帮忙?这是密码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_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];`