我编写了一个函数,它将一个结构数组复制到另一个结构中。问题是它不能正常工作,我不知道为什么。一切似乎都对我好。
我需要做这样的事情:
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。请不要专注于指针的使用。我必须使用它们。如果我在函数外部和内部打印指针,我会看到相同的地址,所以它很好(在我的逻辑中)。
答案 0 :(得分:0)
您可以使用指针将数组传递给函数,但不能使用指针指针传递多维数组。您可以在此处阅读有关创建多维数组指针的更多信息:
修改强> 我们真的需要更多信息。你究竟是什么意思“工作不正常”?数据被复制但最后一个字节丢失了?程序崩溃了?机器蓝屏并开始吸烟?请准确告诉我们您所看到的程序是什么以及它与您的期望有何不同。
考虑到在这里完成指针操作的数量,我强烈建议逐步调试代码并在每一步中仔细检查每个指针。这应该清楚地表明事情何时开始出错,并给出强烈的暗示。
如果更高级别(非memcpy
)版本代码有效,我建议检查为该函数发出的程序集,并将其与基于memcpy
的版本发出的程序集进行比较。一些库使用一个字节大小的副本实现memcpy
,这将使您的二进制版本实际上等同于更高级别的版本。如果是这种情况,那么除了增加复杂性之外,使用memcpy
版本可能不会获得太多收益。