struct Node{
int index;
char *name;
struct Node *nextNode;
};
void insertNode(struct Node *list, char *new_name, int new_index){
struct Node *curr;
struct Node newNode;
curr = list;
//find last node
while(1){
if(curr->nextNode!=NULL){
curr = curr->nextNode;
}else break;
}
curr->nextNode = &newNode;
newNode.name = new_name;
newNode.index = new_index;
newNode.nextNode = NULL;
}
觀察得到以下:- 在main主程式中新增node時,可以正確地建立。
- 將insert 功能包成一個function時,則無法正確地建立正確的資料。
- 但是只有structure 中的字串無法正確建立,int 變數型態則是正確的。
- 以gdb觀察變數的位址與值,觀察到在insert function內,可以成功地建立node,但是回到main function 時,讀取該node的值時卻是錯的。
- 變數在記憶體中的分配
- 變數的宣告方式
void insertNode(struct Node *list, char *new_name, int new_index){
struct Node *curr;
struct Node *newNode;
newNode = malloc(sizeof(struct Node));
curr = list;
//find last node
while(1){
if(curr->nextNode!=NULL){
curr = curr->nextNode;
}else break;
}
curr->nextNode = newNode;
newNode->name = new_name;
newNode->index = new_index;
newNode->nextNode = NULL;
}
讀到self-referenced structure/linked list的時候將重點放在insert/delete node的行為描述,而忽略了變數的宣告方式會影響實作的結果。理清了宣告malloc的用意,原以為兩種等效的方法本值上的差異。