C: Сег вина сводит меня с ума - PullRequest
1 голос
/ 18 ноября 2011

Я отлаживал в течение нескольких часов, и я действительно полностью потерян. Помогите! ПРИМЕЧАНИЕ: в программе намного больше кода, чем это, но остальное работает нормально, поэтому я попытался вытащить весь соответствующий код. Если вы заметили что-то пропущенное, пожалуйста, дайте мне знать.

typedef struct cellT {
queueElementT value;
struct cellT *link;
} cellT;

struct queueCDT {
cellT *head;
cellT *tail;
};

void ReverseQueue(queueADT queue){
int i, x, length;
length = QueueLength(queue);
cellT *beg, *end;
queueElementT temp;

beg = queue->head;

for(i = 0; i < (length/2); i++){
    end = beg;
    for(x = 0; x < (length-i); x++)
        end = end->link;

    /* POINTERS REMAIN, VALUES SWAPPED */
    temp = beg->value;
    beg->value = end->value; /* gdb says issue happens here */
    end->value = temp;
}
}

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Проблема может заключаться в следующем цикле:

for(x = 0; x < (length-i); x++)

Попробуйте изменить его на:

for(x = 0; x < (length-i) && end->link != NULL; x++)
0 голосов
/ 18 ноября 2011

Просто поменяйте местами, только если есть что поменять:

if (beg && end) {
  temp = beg->value;
  beg->value = end->value; 
  end->value = temp;
}
...