C 语言中的垂直翻转位图不起作用



这段代码有问题。尝试用这种方法垂直翻转一个24位未压缩的bmp文件,但出现分段错误。我已经仔细研究了这个逻辑,它似乎是对的。我做错了什么?

int verticalflip (PIXEL *original, PIXEL **new, int rows, int cols) {
int row, col;
if ((rows <= 0) || (cols <= 0)) return -1;
*new = (PIXEL*)malloc(rows*cols*sizeof(PIXEL));
for (row=0; row < rows; row++)
for (col=0; col < cols; col++) {
PIXEL* o = original + row*cols + col;
PIXEL* n = (*new) + (rows-1-row)*cols + col;
*n = *o;
}
return 0;
}

假设您正在尝试创建位图矩阵,

*new = (PIXEL*)malloc(rows*cols*sizeof(PIXEL));

无法正确分配内存。

代码应该是:

new = malloc(rows*sizeof(PIXEL*));
for(int i=0 ; i<rows ; i++)
new[i] = (PIXEL*)malloc(cols*sizeof(PIXEL));

CCD_ 1和CCD_ 2可以根据逻辑的其余部分进行切换。

最新更新