Ich versuche, eine Priorität Warteschlange für "Druckaufträge", die ein Benutzer eingibt. Eine Zeichenfolge wird gefolgt von einem Leerzeichen und dann einer Zahl (0-9) als Priorität des Jobs eingegeben. Sobald "NONE" eingegeben wird, beendet das Programm die Eingabe und ich schreibe schließlich den Code, um die Jobs in der Reihenfolge ihrer Priorität auszudrucken. Der Code ist nicht annähernd fertig, verursacht aber bereits einen Segmentierungsfehler. Ich habe den Code ungefähr zwei Stunden lang angeschaut und sehe nichts falsch. Ich konnte auch keine Fragen finden, von denen ich das Problem lösen könnte. Ich nehme an, ich mache nur etwas Dummes und kann es nicht sehen.Segmentierungsfehler Hilfe für verknüpfte Liste Neuling in C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int priority;
char *dataString;
struct node *next;
};
struct node *first = NULL;
int main(void)
{
char temporaryPriority;
int i = 0;
while(i != 1)
{
struct node *newNode = malloc(sizeof(struct node));
if (newNode == NULL)
{
exit(EXIT_FAILURE);
}
scanf("%s", (newNode -> dataString));
if ((strcmp((newNode -> dataString), "NONE") != 0) && (strcmp((newNode -> dataString), "none") != 0))
{
scanf(" %c", &temporaryPriority);
(newNode -> priority) = temporaryPriority;
(newNode -> next) = first;
first = newNode;
}
else
{
i = 1;
free(newNode);
}
}
return 0;
}
an Code Staring ist im allgemeinen unproduktiv. Es sieht nach zwei Stunden genauso aus wie zu Beginn. Die Verwendung eines Debuggers ist jedoch oft sehr nützlich, ebenso wie ein Werkzeug zur Speicheranalyse wie Valgrind. Das Hinzufügen von printf() - Anweisungen, um den Fortschritt des Codes zu verfolgen, hätte den Problembereich deutlich vor 2 Stunden aufgedeckt. Bitte hören Sie auf, Programme zu schreiben, bis Sie einige rudimentäre Debugging-Fähigkeiten und den Willen haben, sie selbst zu verwenden. –
Im Moment sind Sie seit drei Monaten auf einem CS-Kurs. Bitte sag deinem Prof/TA, dass er seinen Studenten JETZT die Fehlersuche und das Debugging anweist, bevor es sinnlose, zeitraubende Hausaufgaben gibt. –
@MartinJames Ich habe derzeit keinen Zugriff auf einen Debugger, da ich auf einem Server programmieren muss, auf dem nur GCC installiert ist. Ich habe printf-Anweisungen verwendet und Teile des Codes kommentiert, um das Problem zu lösen. Was Sie oben sehen, ist tatsächlich eine neu geschriebene Version, von der ich dachte, dass sie alle Fehler beseitigen würde, die ich nicht gesehen hatte. Ich habe noch nichts über das Debuggen gelernt und dachte darüber nach, mit gdb zu beginnen, aber ich werde auch in valgrind schauen. Danke für den Vorschlag. – Glace