一个创建链表的程序,研究了一天愣是没弄出来,各位高手帮忙看一下感激不尽
#include<stdio.h>
#include<malloc.h>
struct lianbiao
{
int data;
struct lianbiao *next;
} ;
void initlist(int n)
{
struct lianbiao *biao;
int i=0;
for(i=0;i<n;i++)
{
biao->next=(lianbiao*)malloc(sizeof(lianbiao));
(*(biao->next)).data=scanf("%d\n",(*(biao->next)).data);
biao->next=(biao->next)->next;
}
}
void main()
{
initlist(5);
}
编译没有出现问题,就是运行的时候总是自动停止 估计还是程序的逻辑问题啊 求高手帮你忙解决啊
[解决办法]
biao->next=(lianbiao*)malloc(sizeof(lianbiao));
biao没有初始化
可以先创建一个头结点。
[解决办法]
说两个一眼就能看出来的问题:
1.指针biao都没初始化,怎么就能 biao->next=... ,什么叫野指针?
2.biao->next=(biao->next)->next; biao->next指向刚申请的结点,而(biao->next)->next还未初始化,把未知的值给了biao->next,又是一个野指针,biao->next本来存放的刚申请的内存呢,丢掉了,内存泄漏。
[解决办法]
#include<stdio.h>
#include<malloc.h>
#include <string.h>
struct lianbiao
{
int data;
struct lianbiao *next;
} ;
void initlist(int n)
{
struct lianbiao biao1,*biao = NULL;
memset(&biao1, 0, sizeof(lianbiao));
biao=&biao1;
int i=0;
for(i=0;i<n;i++)
{
biao->next=(lianbiao*)malloc(sizeof(lianbiao));
memset(biao->next, 0, sizeof(lianbiao));
printf("input\n");
(*(biao->next)).data=scanf("%d\n",&(*(biao->next)).data); //少个&
printf("suceed\n");
biao=biao->next;
}
}
void main()
{
initlist(5);
}
没吃饭也要先帮你下。
我的异常网推荐解决方案:程序员的一天,http://www.myexception.cn/other/1391144.html