我試圖實現一個函數makelinkedList
,它接受鏈表中的節點數並返回地址。功能printlinkedList
打印鏈接列表。爲什麼在這個LinkedList實現中出現分段錯誤
當我實現此代碼時,我不會收到分段錯誤。
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
};
typedef struct node linkedList;
void printlinkedList(linkedList** head){
linkedList* crawler = *head;
while(crawler!=NULL){
printf("%d -> ", crawler->data);
crawler= crawler->next;
}
printf("|NULL|\n");
}
linkedList* makelinkedList(int size){
linkedList* crawler = malloc(sizeof(linkedList));
crawler->data = --size;
crawler->next = NULL;
linkedList* head = crawler;
while(size > 0){
crawler->next = malloc(sizeof(linkedList));
crawler = crawler->next;
crawler->data = --size;
crawler->next = NULL;
}
printlinkedList(&head);
return head;
}
int main(void) {
// your code goes here
linkedList* node = (makelinkedList(5));
linkedList** head = &node;
printf("from main\n");
printlinkedList(head);
return 0;
}
輸出的代碼的以上給出: - > 3 - > 2 - > 1 - > 0 -
4> | NULL |
但是當我嘗試返回頭部的地址(&頭部)時,我得到了分段錯誤。導致錯誤的代碼如下:
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
};
typedef struct node linkedList;
void printlinkedList(linkedList** head){
linkedList* crawler = *head;
while(crawler!=NULL){
printf("%d -> ", crawler->data);
crawler= crawler->next;
}
printf("|NULL|\n");
}
linkedList** makelinkedList(int size){
linkedList* crawler = malloc(sizeof(linkedList));
crawler->data = --size;
crawler->next = NULL;
linkedList* head = crawler;
while(size > 0){
crawler->next = malloc(sizeof(linkedList));
crawler = crawler->next;
crawler->data = --size;
crawler->next = NULL;
}
return &head;
}
int main(void) {
// your code goes here
linkedList** head = (makelinkedList(5));
printf("from main\n");
printlinkedList(head);
return 0;
}
爲什麼我不能返回頭的地址?
地方(而不是靜態)指針變量的地址不是範圍的有效之外。 – BLUEPIXY
你的代碼的第一個版本很好..沒有必要混亂它。儘管你可以傳遞一個單一深度的指針到'print'。 –