C / C ++二进制复制数组函数不起作用

时间:2012-04-10 19:35:05

标签: c arrays pointers binary

我编写了一个函数,它将一个结构数组复制到另一个结构中。问题是它不能正常工作,我不知道为什么。一切似乎都对我好。

  • 像素是具有3个无符号字符的结构,sizeof(pixel)= 3,
  • pixarr1是指向二维DYNAMIC数组[8] [2],
  • 的指针
  • pixarr2是指向二维DYNAMIC数组[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。请不要专注于指针的使用。我必须使用它们。如果我在函数外部和内部打印指针,我会看到相同的地址,所以它很好(在我的逻辑中)。

1 个答案:

答案 0 :(得分:0)

您可以使用指针将数组传递给函数,但不能使用指针指针传递多维数组。您可以在此处阅读有关创建多维数组指针的更多信息:

修改 我们真的需要更多信息。你究竟是什么意思“工作不正常”?数据被复制但最后一个字节丢失了?程序崩溃了?机器蓝屏并开始吸烟?请准确告诉我们您所看到的程序是什么以及它与您的期望有何不同。

考虑到在这里完成指针操作的数量,我强烈建议逐步调试代码并在每一步中仔细检查每个指针。这应该清楚地表明事情何时开始出错,并给出强烈的暗示。

如果更高级别(非memcpy)版本代码有效,我建议检查为该函数发出的程序集,并将其与基于memcpy的版本发出的程序集进行比较。一些库使用一个字节大小的副本实现memcpy,这将使您的二进制版本实际上等同于更高级别的版本。如果是这种情况,那么除了增加复杂性之外,使用memcpy版本可能不会获得太多收益。