翻转图像时出现分段错误

时间:2014-11-10 02:23:51

标签: c segmentation-fault

当我运行此代码时,我不断遇到分段错误。我知道当没有足够的内存分配给数组时会发生分段错误。有人知道seg故障发生在哪里吗?

void flip_horizontal( uint8_t array[], 
              unsigned int cols, 
              unsigned int rows )
{
    for(int r = 0; r < rows; r++)
    {
        unsigned int left = 0;
        unsigned int right = cols;
        int* array = malloc(sizeof(uint8_t));
        assert(array);
        while(left != right && right > left)
        {
            int temp = array[r * cols+ left];
            array[(r * cols) + left] = array[(r * cols) + cols - right];
            array[(r * cols) + cols - right] = temp;
            right++;
            left++;
        }
        free(array);
    }
}

2 个答案:

答案 0 :(得分:3)

你犯了一个非常简单的错误。您的leftright指数应该相互走向;相反,你在循环中递增它们。

答案 1 :(得分:0)

int* array = malloc(sizeof(uint8_t));
......
free(array);

您分配了内存,并将其地址分配给了数组&#39;并且内存大小只有1个字节。 &#39; cols&#39;只有1个字节。可能大于1,内存的大小不够大。删除那两行可以解决第一个问题。 BTW,变量&#39;数组&#39;不应该改变,你不需要缓冲来翻转。

此外,左,右和交换循环应为:

unsigned int left = 0;
unsigned int right = cols - 1;

while(left < right) {
  int temp = array[r * cols + left];
  array[r * cols + left] = array[r * cols + right];
  array[r * cols + right] = temp;

  right--;
  left++;
}