Я пытался создать Очереди в C (как проект класса). Демо-код, который они предоставили, предназначен для Borland Turbo C. Я пытаюсь перестроить программу через gcc
. Хотя код отлично работает в Turbo C, он выдает ошибку в gcc
во время выполнения как Segmentation Fault (core dumped)
.Инициализация указателя итератора: ошибка сегментации
Я не включил ненужные части кода. Пробовал и тестировал его по строкам.
struct node {
int data;
struct node *link;
};
struct queue {
struct node *front;
struct node *rear;
};
void initQ(struct queue *q) {
q->front = q->rear = NULL; // Error : Segmentation Fault! (core dumped)
}
void main() {
struct queue *Q;
initQ(Q);
}
Я уверен, что проблема связана с версией C в компиляторе. Поскольку Turbo C довольно древний, он не поддерживает последние исправления. Я получаю подобную ошибку Segmentation Fault
в различных других частях коды, как:
void displayQ(struct queue *q) {
struct node *temp;
temp->link = q->front; // Error : Segmentation Fault! (core dumped)
}
Вопрос 1: Почему GCC дает такую ошибку во время выполнения? (в этом коде)
Вопрос 2: Почему код работает нормально в Turbo C, но не gcc?
Вопрос 3: Есть ли альтернатива такому стилю программирования?
Вопрос 2: код недействителен в каждой версии C, поэтому изучение того, почему он работает с Turbo C, будет зависеть от нескольких других данных. Например. Платформа. Также обратите внимание, что он может работать для небольших очередей, но не работает для большего ввода, или может быть немедленно сработал, если снова запустится и так далее.Кажется, что 'Q' имеет какое-то случайное значение, которое может быть разыменовано (то, на что оно указывает, и другие данные, которые вы могли бы перезаписать, - это другое дело). Также обратите внимание, что он мог работать, когда скомпилирован с Gcc. – mafso