我想通过使用第二个等级指针来初始化序列列表,该指针指向我为序列列表制作的STRUCT。我试过,脚本可以编译成可执行文件,但无法运行。
我正在使用带有CP CPP 5.11的C作为IDE。
我只想使用* Sqlist作为我的参数来初始化序列列表...
这是序列表。
/* can be compiled ,but fail to execute.*/
#include <stdio.h>
#include <stdlib.h>
#define LISTSIZE 10
typedef int ElemType;
typedef struct List{
ElemType *elem;
int length;
int listsize;
}List,*Sqlist;
int InitList(Sqlist *L){
(*L)->elem=(ElemType*)malloc(sizeof(ElemType)*LISTSIZE);
if (!(*L)->elem) return -1;
(*L)->length=0;
(*L)->listsize=LISTSIZE;
}
int main(){
Sqlist La;
InitList(&La);
}
与我使用第二个排名指针作为Initialize函数的参数的链接列表相比,这是令人满意的。
#include <stdlib.h>
#include <stdio.h>
#include <typeinfo.h>
typedef int ElemType ;
typedef struct LNode{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
int InitList(LinkList *L) {
(*L)=(LinkList)malloc(sizeof(struct LNode));
if (!*L) return -1;
(*L)->data= 0;
(*L)->next =NULL;
printf("successfully initialized.\n");
return 0;
}
我真的很感谢你的帮助!
答案 0 :(得分:0)
注意第二个代码在访问其成员之前如何为列表动态分配空间:
(*L)=(LinkList)malloc(sizeof(struct LNode));
(*L)->data= 0;
现在你去做:
Sqlist La;
InitList(&La);
将执行此操作:
int InitList(Sqlist *L) {
(*L)->elem=(ElemType*)malloc(sizeof(ElemType)*LISTSIZE);
但指针没有记忆!它指向哪里?没有人确切知道。你取消引用指针,要求其成员elem
,并繁荣!您刚刚调用了未定义的行为!
代码编译但无法运行。
这是你的程序“无法运行”的方式,因为你有一个逻辑错误,如上所述。
首先需要为Sqlist
分配内存,就像之前为LinkList
所做的那样,然后访问其成员。
PS:最好将指针初始化为NULL,如下所示:Sqlist La = NULL;
。
哦,顺便说一句,与你的问题无关,Do I cast the result of malloc?不!