一、问题概述
typedef struct{
ElemType data;
struct LNode *next;
}LNode;
在写线性链表时发现为链表用malloc直接给参数分配的内存在同一个函数里不能立即使用。
例如:
void CreateList(LNode *L){
//创造一个空的链表并初始化
L=(LNode*)malloc(sizeof(LNode));
L->data=NULL;
L->next=NULL;
}
在后续对链表的操作时发现该链表头结点的成员没有成功初始化,在调用其成员时得到的是一个随机数。后来对初始的data进行改变发现确实没有成功进行赋值。
二、解决
经过多次尝试,发现将分配出来的指针赋给另一个新的同类型变量,再对这个变量进行之后的操作就会成功执行。
改动完如下:
void CreateList(LNode* L){
//创造一个空的链表并初始化
LNode* p=L;
L=(LNode*)malloc(sizeof(LNode));
p->data=NULL;
p->next=NULL;
}
三、疑惑
虽然经过调整达到了想要的效果但是还是不理解是哪里出了问题,有没有大佬给看看。
源码:
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct{
ElemType data;
struct LNode *next;
}LNode;
void CreateList(LinkList L){
//创造一个空的链表并初始化
LinkList p=L;
L=(LNode*)malloc(sizeof(LNode));
p->data=NULL;
p->next=NULL;
}
int main(){
LNode la,*LA;
LA=*la;
CreateList(LA);
printf("%d\n",la.data);
}