0
我面臨的一個問題,我試圖調試它,但我找不到任何分段故障而從隊列彈出
#include <stdio.h>
#include <stdlib.h>
struct Process {
int id;
int at;
int bt;
int rt;
struct Process *next;
} *tmp;
struct Queue {
struct Process *head, *tail;
};
struct Process *pop(struct Queue *queue) {
if (queue->head == NULL) {
return NULL;
}
tmp = queue->head;
queue->head = queue->head->next;
return tmp;
}
int main() {
struct Queue queues[3];
struct Process *working;
for (int i = 0; i < 3; i++) {
queues[i].head = NULL;
}
FILE *processesFile = fopen("processes.txt", "r");
while (!feof(processesFile)) {
fscanf(processesFile, "%d %d %d", &id, &at, &bt);
push(&queues[0], id, at, bt);
}
working = pop(&queues[0]); // HERE IS THE PROBLEM, It is removing the first element but causing segmentation error
return 0;
}
我刪除了推部分,我可以成功推5個值打印整個隊列沒有任何問題
問題可能出在推送部分。例如,如果在推送時不將'next'字段設置爲NULL。你能[編輯]你的文章,以便我們可以看到它嗎? –
我不知道這是否是解決方案,因此發表評論。您正在使用可怕的'feof'。它不會告訴你在文件結束。請看[爲什麼「while(!feof(file))」總是出錯?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)。如果你已經對'fscanf'的返回值做了必要的檢查,那麼這個錯誤就會被困住。 'if(fscanf(processesFile,「%d%d%d」,&id,&at,&bt)!= 3){/ * trap error * /};'。 (fscanf(processesFile,「%d%d%d」,&id,&at,&bt)== 3){/ * process * /}' –
@ Jean-FrançoisFabre我忘記了將「next」設置爲NULL的情況。謝謝。 – Ambitions