【发布时间】:2016-01-10 20:12:49
【问题描述】:
当它尝试打印列表中的第二个成员时,为什么我得到一个 segmentationfault?
打印列表的第一个元素后,调试器打开 stdio.h 并显示:
在 C:\TDM-GCC-32\include\stdio.h:255
在 C:\TDM-GCC-32\include\stdio.h:256
在 C:\TDM-GCC-32\include\stdio.h:258
在 C:\TDM-GCC-32\include\stdio.h:259
这里是代码。
#include <stdio.h>
#include <stdlib.h>
struct Student {
char *Name;
char *Adresse;
unsigned long Mtnr;
short Kurse;
struct Student *next;
struct Student *previous;
};
typedef struct Student Student;
Student *liste = NULL, *ende = NULL;
void add(char Name, char Adresse, unsigned long Mtnr, short Kurse) {
Student *add;
ende->next = malloc(sizeof(Student));
add = ende->next;
add->Name = Name;
add->Adresse = Adresse;
add->Mtnr = Mtnr;
add->Kurse = Kurse;
add->previous = ende;
add->next = NULL;
ende = ende->next;
}
void Ausgabe(Student *Anfang) {
while (Anfang != NULL) {
printf("%s %s %d %d \n", Anfang->Name, Anfang->Adresse, Anfang->Mtnr, Anfang->Kurse);
Anfang = Anfang->next;
}
}
int main() {
liste = malloc(sizeof(Student));
ende = liste;
liste->Name = "Anna Musterfrau";
liste->Adresse = "Am Schwarzberg-Campus 3";
liste->Mtnr = 22222;
liste->Kurse = 2;
liste->next = NULL;
liste->previous = NULL;
add("Hans Peter", "Kasernenstrasse 4", 4444, 4);
Ausgabe(liste);
return 0;
}
【问题讨论】:
-
%d不适用于unsigned long.....%lu似乎合适