当我运行此代码时,我不断遇到分段错误。我知道当没有足够的内存分配给数组时会发生分段错误。有人知道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);
}
}
答案 0 :(得分:3)
你犯了一个非常简单的错误。您的left
和right
指数应该相互走向;相反,你在循环中递增它们。
答案 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++;
}