#include "stdio.h"
typedef struct Node{
int elem;
struct Node *next;
}Link,*List;
void InitLink(List L);//初始化单链表
void CtreateLink(List L);//为单链表录入数据
void print(List L);//打印单链表
void main()
{
List T,S;
InitLink(T);
S=T;
printf("Enter Data:");
CtreateLink(S);//这个函数出现问题
print(T);//这个函数出现问题
}
//初始化单链表
void InitLink(List L){
L=(List)malloc(sizeof(Link));
}
//为单链表录入数据
void CtreateLink(List L){
List r;
int elem;
r=(List)malloc(sizeof(Link));
scanf("%d",&elem);
while(elem!=-1)
{
r->elem=elem;
L->next=r; //在L->next=r这块程序直接崩溃
L=r;
printf("Enter Data:");
scanf("%d",&elem);
}
L->next=NULL;
}
//打印单链表
void print(Link *L){
L=L->next; //在L=L->next这块程序直接崩溃
while(L!=NULL)
{
printf("%d ",L->elem);
L=L->next;
}
}
11 个解决方案
#1
print
最好能先判断 L; 如果只一个元素的,直接coredump
if(NULL == L)
return;
最好能先判断 L; 如果只一个元素的,直接coredump
if(NULL == L)
return;
#2
List T,S;
相当于: Link *T, *S;
指针没有分配内存
相当于: Link *T, *S;
指针没有分配内存
#3
InitLink(T);
你这样并没有给T分配空间,除非使用二级指针。
你这样并没有给T分配空间,除非使用二级指针。
#4
应该改成:
void InitLink(List* pL) {
*pL = (List)malloc(sizeof(Link));
}
#5
而且初始化也没有指示List->next=NULL
void InitLink(List L){
L=(List)malloc(sizeof(Link));
}
主要是这个吧。应该把改变了的L返回回去,否则主函数没有改变吧。
void InitLink(List L){
L=(List)malloc(sizeof(Link));
}
主要是这个吧。应该把改变了的L返回回去,否则主函数没有改变吧。
#6
3,4楼跟我的想法差不多。
#7
void InitLink(List L){
L=(List)malloc(sizeof(Link)); 只是对局部变量进行内存分配
}
改成
void InitLink(List *L){
*L=(List)malloc(sizeof(Link));
}
或者
List InitLink(){
return (List)malloc(sizeof(Link));
}
InitLink(T) ==》 T = InitLink();
L=(List)malloc(sizeof(Link)); 只是对局部变量进行内存分配
}
改成
void InitLink(List *L){
*L=(List)malloc(sizeof(Link));
}
或者
List InitLink(){
return (List)malloc(sizeof(Link));
}
InitLink(T) ==》 T = InitLink();
#8
Link T在外面是NULL,进入InitLink(Link L)之后,相当于把NULL给了Link L,此后L和T就没关系了
#9
支持7楼的
初始化有错 造成空指针
初始化有错 造成空指针
#10
malloc(配置内存空间)
相关函数
calloc,free,realloc,brk
表头文件
#include<stdlib.h>
定义函数
void * malloc(size_t size);
函数说明
malloc()用来配置内存空间,其大小由指定的size决定。
返回值
若配置成功则返回一指针,失败则返回NULL。
范例
void p = malloc(1024); /*配置1k的内存*/
malloc 方法的返回值是指针,
你的 L=(List)malloc(sizeof(Link)); 定义不对。
相关函数
calloc,free,realloc,brk
表头文件
#include<stdlib.h>
定义函数
void * malloc(size_t size);
函数说明
malloc()用来配置内存空间,其大小由指定的size决定。
返回值
若配置成功则返回一指针,失败则返回NULL。
范例
void p = malloc(1024); /*配置1k的内存*/
malloc 方法的返回值是指针,
你的 L=(List)malloc(sizeof(Link)); 定义不对。
#11
谢谢各位了 问题解决!1
#1
print
最好能先判断 L; 如果只一个元素的,直接coredump
if(NULL == L)
return;
最好能先判断 L; 如果只一个元素的,直接coredump
if(NULL == L)
return;
#2
List T,S;
相当于: Link *T, *S;
指针没有分配内存
相当于: Link *T, *S;
指针没有分配内存
#3
InitLink(T);
你这样并没有给T分配空间,除非使用二级指针。
你这样并没有给T分配空间,除非使用二级指针。
#4
应该改成:
void InitLink(List* pL) {
*pL = (List)malloc(sizeof(Link));
}
#5
而且初始化也没有指示List->next=NULL
void InitLink(List L){
L=(List)malloc(sizeof(Link));
}
主要是这个吧。应该把改变了的L返回回去,否则主函数没有改变吧。
void InitLink(List L){
L=(List)malloc(sizeof(Link));
}
主要是这个吧。应该把改变了的L返回回去,否则主函数没有改变吧。
#6
3,4楼跟我的想法差不多。
#7
void InitLink(List L){
L=(List)malloc(sizeof(Link)); 只是对局部变量进行内存分配
}
改成
void InitLink(List *L){
*L=(List)malloc(sizeof(Link));
}
或者
List InitLink(){
return (List)malloc(sizeof(Link));
}
InitLink(T) ==》 T = InitLink();
L=(List)malloc(sizeof(Link)); 只是对局部变量进行内存分配
}
改成
void InitLink(List *L){
*L=(List)malloc(sizeof(Link));
}
或者
List InitLink(){
return (List)malloc(sizeof(Link));
}
InitLink(T) ==》 T = InitLink();
#8
Link T在外面是NULL,进入InitLink(Link L)之后,相当于把NULL给了Link L,此后L和T就没关系了
#9
支持7楼的
初始化有错 造成空指针
初始化有错 造成空指针
#10
malloc(配置内存空间)
相关函数
calloc,free,realloc,brk
表头文件
#include<stdlib.h>
定义函数
void * malloc(size_t size);
函数说明
malloc()用来配置内存空间,其大小由指定的size决定。
返回值
若配置成功则返回一指针,失败则返回NULL。
范例
void p = malloc(1024); /*配置1k的内存*/
malloc 方法的返回值是指针,
你的 L=(List)malloc(sizeof(Link)); 定义不对。
相关函数
calloc,free,realloc,brk
表头文件
#include<stdlib.h>
定义函数
void * malloc(size_t size);
函数说明
malloc()用来配置内存空间,其大小由指定的size决定。
返回值
若配置成功则返回一指针,失败则返回NULL。
范例
void p = malloc(1024); /*配置1k的内存*/
malloc 方法的返回值是指针,
你的 L=(List)malloc(sizeof(Link)); 定义不对。
#11
谢谢各位了 问题解决!1