【发布时间】:2015-12-19 08:32:35
【问题描述】:
我正在尝试实现一个函数makelinkedList,它接受链表中的节点数并返回 .函数printlinkedList打印链表。
我在实现此代码时没有遇到分段错误。
#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;
}
上面给出的代码的输出:
4 -> 3 -> 2 -> 1 -> 0 -> |NULL|
但是当我尝试返回 head (&head) 的地址时,我遇到了分段错误。导致错误的代码如下:
#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;
}
为什么不能返回头部地址?
【问题讨论】:
-
本地(而非静态)指针变量的地址在范围外无效。
-
你的代码的第一个版本很好..没必要弄乱它。不过,您可以将单深度指针传递给
print。
标签: c pointers linked-list segmentation-fault