【发布时间】:2012-04-23 03:01:00
【问题描述】:
我编写了一个函数,它可以将一个结构数组二进制复制到另一个结构数组。问题是它不能正常工作,我不知道为什么。对我来说一切都很好。
- pixel 是一个有 3 个无符号字符的结构体,sizeof(pixel) = 3,
- pixarr1 是指向二维 DYNAMIC 数组 [8][2] 的指针,
- pixarr2 是指向二维动态数组 [8][n] 的指针。例如,n = 8,这并不重要。
我需要这样做:
for(int i=0; i<8; i++) {
for(int y=0; y<2; y++) {
arr2[i][y] = arr1[i][y];
}
}
但我想做“二进制”。像这样:
void copyStruct(pixel*** pixarr1, int startline, int height, pixel*** pixarr2) {
pixel** arr1 = *pixarr1;
pixel** arr2 = *pixarr2;
unsigned char buffer[16];
int sizeofstruct = height*3*8;
int padding;
for(int i=0; i<=sizeofstruct; i+=16) {
if ( i+16 > sizeofstruct) {
padding = sizeofstruct-i;
memcpy(buffer, arr1+i, padding);
memcpy(arr2+(startline*8)+i, buffer, padding);
} else {
memcpy(buffer, arr1+i, 16);
memcpy(arr2+(startline*8)+i, buffer, 16);
}
}
}
我犯了什么错误?
PS。抱歉,源代码的问题,这个编辑器是..
PPS。请不要专注于指针的使用。我必须使用它们。如果我在函数内外打印指针,我会看到相同的地址,所以这很好(在我的逻辑中)。
【问题讨论】:
-
你真的打印出 sizeof(pixel) 是 3 吗?
-
“不能正常工作”是什么意思?
-
硬编码太多。即使您认为它是 3(不太可能恕我直言),请使用
sizeof。请记住,这是在编译时评估的,因此不会影响性能。它也应该直接或间接地用于各种跨步(* 8 等)。 -
Arghhh 我的眼睛受伤了:pixel*** pixarr1。请传递对 std::vector 的引用。谢谢:-)。
-
每传一个三分球,上帝就杀了一只小猫。