user-0 提问: segmentation fault :11错误

回复:
user: user-1
content: scanf("%d",&data);包含回车符。

user: user-0
content: 引用 5 楼 user-2的回复:你这个不是最后指针为空的问题。最后的指针为空是对的。你这里主要是参数的问题，你没理解参数是怎么传递的。 按照你的想法，我把代码做了些优化：   #include <stdio.h> #include <stdlib.h>  typedef struct tagNode {     int             data; 	struct tagNode* next; }Node;  Node* getNode(int data) {     Node* node = (Node*)malloc(sizeof(Node));     node->data = data;     node->next = NULL;     return (node); }  void append(Node* last) { 	int data = 0; 	printf("准备赋值："); 	scanf("%d",&data); 	if(data > 0) 	{ 	    last->next = getNode(data); 	    append(last->next); 	} }  void display(Node *head) {     Node* node = head;     int data = 0; 	printf("准备输出：\n"); 	while(NULL != node)     {         printf("data: %d\n", (data = node->data, node = node->next, data));     } }  void destroy(Node* head) {     Node* node = head;     int data = 0; 	printf("准备释放：\n"); 	while(NULL != node)     {         printf("free: %d\n", (data = node->data, head = head->next, free(node), node= head, data));     } }  int main() {     Node *head = getNode(-1); 	append(head); 	display(head); 	destroy(head); 	return (0); }  好的，谢谢，我再研究一下

user: user-2
content: 你这个不是最后指针为空的问题。最后的指针为空是对的。你这里主要是参数的问题，你没理解参数是怎么传递的。 按照你的想法，我把代码做了些优化：   #include <stdio.h> #include <stdlib.h>  typedef struct tagNode {     int             data; 	struct tagNode* next; }Node;  Node* getNode(int data) {     Node* node = (Node*)malloc(sizeof(Node));     node->data = data;     node->next = NULL;     return (node); }  void append(Node* last) { 	int data = 0; 	printf("准备赋值："); 	scanf("%d",&data); 	if(data > 0) 	{ 	    last->next = getNode(data); 	    append(last->next); 	} }  void display(Node *head) {     Node* node = head;     int data = 0; 	printf("准备输出：\n"); 	while(NULL != node)     {         printf("data: %d\n", (data = node->data, node = node->next, data));     } }  void destroy(Node* head) {     Node* node = head;     int data = 0; 	printf("准备释放：\n"); 	while(NULL != node)     {         printf("free: %d\n", (data = node->data, head = head->next, free(node), node= head, data));     } }  int main() {     Node *head = getNode(-1); 	append(head); 	display(head); 	destroy(head); 	return (0); }

user: user-0
content: 引用 3 楼 user-2的回复: #include <stdio.h> #include <stdlib.h> typedef struct node {	int data; 	struct node *next;  }linklist; void Insert_list(linklist **rear,int entag)//利用尾插法插入元素。 { 	int val; 	//int x =0; 	//linklist *rear=L; 	printf("准备赋值"); 	scanf("%d",&val); 	if(val==entag) 		(*rear) =NULL; 		//printf("完成"); 		//{rear = (linklist*)malloc(sizeof(linklist));rear->next=NULL;rear->data=45;printf("完成");} 	else 	{ 		(*rear) = (linklist*)malloc(sizeof(linklist)); 		(*rear)->data = val; 		printf("\n————————————完成————————————\n"); 		Insert_list(&((*rear)->next),entag);  	} } void init_list(linklist **head) { 	(*head) = (linklist*)malloc(sizeof(linklist)); 	(*head)->next = NULL; 	printf("\n初始化完成\n"); }  void print_list(linklist *head) {	linklist *p=head->next; 	printf("准备输出：\n"); 	while(p!=NULL) 	{ 		printf("%d\n",p->data); 		p=p->next; 	} printf("链表为空"); }  int main() {	linklist *L;  	printf("创建成功"); 	//L = (linklist*)malloc(sizeof(linklist)); 	//linklist *rear = L; 	init_list(&L); 	Insert_list(&(L->next),4); 	print_list(L);  return 0;}  那为什么之前写法不行呢，链表最后指针为空不也应该可以吗？

user: user-2
content: #include <stdio.h> #include <stdlib.h> typedef struct node {	int data; 	struct node *next;  }linklist; void Insert_list(linklist **rear,int entag)//利用尾插法插入元素。 { 	int val; 	//int x =0; 	//linklist *rear=L; 	printf("准备赋值"); 	scanf("%d",&val); 	if(val==entag) 		(*rear) =NULL; 		//printf("完成"); 		//{rear = (linklist*)malloc(sizeof(linklist));rear->next=NULL;rear->data=45;printf("完成");} 	else 	{ 		(*rear) = (linklist*)malloc(sizeof(linklist)); 		(*rear)->data = val; 		printf("\n————————————完成————————————\n"); 		Insert_list(&((*rear)->next),entag);  	} } void init_list(linklist **head) { 	(*head) = (linklist*)malloc(sizeof(linklist)); 	(*head)->next = NULL; 	printf("\n初始化完成\n"); }  void print_list(linklist *head) {	linklist *p=head->next; 	printf("准备输出：\n"); 	while(p!=NULL) 	{ 		printf("%d\n",p->data); 		p=p->next; 	} printf("链表为空"); }  int main() {	linklist *L;  	printf("创建成功"); 	//L = (linklist*)malloc(sizeof(linklist)); 	//linklist *rear = L; 	init_list(&L); 	Insert_list(&(L->next),4); 	print_list(L);  return 0;}

user: user-0
content: 引用 1 楼 user-2的回复:大坑！！！！！ 什么意思啊!

user: user-2
content: 大坑！！！！！