我剛剛開始使用C,我認爲整個指針/ malloc/free讓我很生氣。我試圖定義一個簡單的線性遞歸數據結構,並通過它循環,打印出我所穿過的每個元素。 (代碼如下)。循環遍歷遞歸列表C
但是,我得到段錯誤:一旦11,我嘗試移動到下一個元素,以「插入」一個新的元素
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct number_list {
int num;
struct number_list *next_num;
} numlist;
int main() {
numlist *cur, *pointer;
numlist *NewList=NULL;
cur = NewList;
cur = malloc(sizeof(numlist));
cur->num=5; // this operation is never reached too
cur = cur->next_num // Must I malloc?
printf("Reached."); // Is never reached.
cur->num=9;
pointer=NewList;
while (pointer!=NULL) {
printf("%d", pointer->num);
pointer=pointer->next_num;
}
return 0;
}
而且,我有另一個更大的程序while-循環,其功能完全像這樣的while循環,除了在「填充」遞歸結構之外。因此,我實際上並不需要創建任何新元素,只需通過並打印每個元素即可。但是,在循環打印最後一個元素的那一刻,它又崩潰了Segmentation Fault:11。我猜這可能是因爲我試圖做pointer = pointer->next_num
。那麼我如何正確地在C上正確運行這樣的數據結構呢?
是的謝謝你的解釋,絕對清除了很多東西了! – mercurial 2013-05-06 12:45:20