我试图实现一个函数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'。 –