2014-11-10 3 views
0

Когда я запускаю этот код, я продолжаю получать ошибки сегментации. Я знаю, что ошибки сегментации возникают, когда памяти недостаточно, выделенной для массива. Кто-нибудь знает, где происходит ошибка 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); 
    } 
} 
+1

Добавить '-g' в вашей GCC командной строки при компиляции и запустить программу под отладчиком GDB. Он точно скажет вам, где происходит segfault, а также позволяйте вам сориентироваться и видеть, какие переменные приводят к плохому доступу ('info locals'). –

ответ

3

Вы сделали очень легкую ошибку. Ваши индексы left и right должны перемещаться друг к другу; вместо этого вы увеличиваете оба из них внутри своего цикла.

+0

, так что я должен был оставить приращение и правый декремент? – user3880587

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

Вы выделили ячейки памяти, присвоенные его адресу массиву, и размер памяти составляет всего 1 байт. Есть только 1 байт, в то время как «cols» может быть больше 1, размер памяти недостаточно велик. Удалите эти две строки, чтобы исправить первую проблему. BTW, переменная «array» не должна изменяться, и вам не нужен буфер для перевода.

Кроме того, левый, правый и замена петли должны быть:

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++; 
} 
Смежные вопросы