meine Arbeit ist es, eine CFG aus einer Datei zu lesen und speichern Sie es in einer verketteten Liste. Durchqueren Sie dann die verknüpfte Liste, um Nullproduktionen zu entfernen. Meine Logik besteht darin, ein Array innerhalb der verknüpften Liste zu verwenden. Ein einzelner verknüpfter Listenknoten zeigt auf ein Array in seinem Wertenteil. Das Array speichert eine CFG-Zeile bis zu einer neuen Zeile. Wenn ein '\ n' kommt, wird ein neuer Knoten erstellt und zeigt auf ein Array. Der Prozess wird bis EOF wiederholt. Ich habe es coded aber bekommen Segmentierung FehlerCFG von einer Datei in eine Linkedlist lesen mit C
/*the CFG
S>ABe
A>dB
B>AS
*/
typedef struct node {
//int val;
struct node * next;
char arr[5];//the array to save CFG per line
}node_t;
int main() {
node_t * head = NULL;
head = malloc(sizeof(node_t));
FILE *fp;
char c; int i;
fp = fopen("cfg.txt", "r");
while((c = fgetc(fp)) != EOF) {
head->next = malloc(sizeof(node_t));
while(head->next != NULL) { //traverse till end of list
head = head->next;
}
//now adding new line;
for(i=0; i<5; i++) {
head->next->arr[i] = c;
if(c == '>'){
continue;
}else if(c == '\n') {
break;
}
}
}
}
Es gibt viele Probleme mit dem Code, aber die beiden wichtigsten ist, dass Sie Ihren Kopf Knoten lösen, und dass Sie dereferenzieren einen 'NULL' Zeiger. Was denkst du, "head-> next", nachdem du "bis zum Ende der Liste" gegangen bist? –
Mögliches Duplikat von [Definitive Liste gemeinsamer Gründe für Segmentierungsfehler] (http://stackoverflow.com/questions/33047452/definitive-list-of-common-reasons-for-segmentation-faults) –
Ja Joachim Pileborg, ich nahm eine Pause, als trocken, lief mein Code, und es machte absolut keinen Sinn. Ich habe keine Ahnung, was ich dachte, als ich es gemacht habe. Aber ich habe es behoben. Danke für die Antwort. –