哪里的指针错了?

opposever 2009-04-15 09:33:24

typedef struct SqList

{

ElemType *elem; // 存储空间基址

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

}*SqList;

int main(int argc, char *argv[])
{

SqList mylist;
InitList(mylist);
return 0;
}

Status InitList(SqList L)

{ // 操作结果:构造一个空的顺序线性表---------------1

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//运行到这里就出错
L->length=0; // 空表长度为0
L->listsize=LIST_INIT_SIZE; // 初始存储容量
return OK;

}


运行到malloc那里就报错。
...全文
110 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxuyu1118 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liurui703 的回复:]
不出错才怪呢。
SqList mylist 相当于一个指针,你没有为它分配空间,L->elem就会出错了,函数外就应该malloc(sizeof(你的结构体大小))
[/Quote]
right
继续睡 2009-04-16
  • 打赏
  • 举报
回复
首先来说,Sqlist这个数据结构是指针,这是空指针造成的错误。
附上我加的代码,我把ElemType改成int 无所谓吧..
#include<stdio.h>
typedef struct SqList

{

int *p; // 存储空间基址

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

}Head, *SqList; //增加了表头,这个数据结构也就是这个意思吧



void InitList(SqList L)

{ // 操作结果:构造一个空的顺序线性表---------------1
L->p=(int*)malloc(sizeof(int)); //运行到这里就出错
L->length=0; // 空表长度为0
L->listsize=10; // 初始存储容量
}
int main(int argc, char *argv[])
{
Head head; //指的是表头
SqList mylist;
mylist = &head;
InitList(mylist);
system("pause");
}
主要就是加入了对指针的初始化。

c_fresher 2009-04-16
  • 打赏
  • 举报
回复
mylist的空间没有被分配给它 不行
yingkundu 2009-04-16
  • 打赏
  • 举报
回复
依我看原代码中不止有一处错误。同意12楼的意见!
sanguomi 2009-04-16
  • 打赏
  • 举报
回复

typedef struct SqList

{

ElemType *elem; // 存储空间基址

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

}*SqList;


这么写本身就错了
shine_paul 2009-04-15
  • 打赏
  • 举报
回复
1.ElemType *elem;
这个ElemType应该在程序上面被typedef int ElemType;执行过才可以的~~~当然不一定就是int啊~~~

2.L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
楼主这一行代码不知道是因为我水平不够不懂这个还是你写错了,
好像这样L=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));才是对的吧~~~
zgjxwl 2009-04-15
  • 打赏
  • 举报
回复
呵呵~~大部分数据结构的书都是伪代码的。。
na2650945 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chenzhp 的回复:]
ElemType 你都没有确定过。

你刚才的代码算得上一个伪代码了
[/Quote]
正解。
就是数据结构里面为了说明算法用的代码。
而且清华那本的代码不是很对。
na2650945 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sherrik 的回复:]
错误发来看看 代码不完整运行不起来
[/Quote]
表面看没毛病。
发具体代码。
chenzhp 2009-04-15
  • 打赏
  • 举报
回复
ElemType 你都没有确定过。

你刚才的代码算得上一个伪代码了
chenzhp 2009-04-15
  • 打赏
  • 举报
回复
#define LIST_INIT_SIZE 10
typedef int ElemType;

typedef struct SqList
{

ElemType *elem; // 存储空间基址

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

}*Sqist;
int InitList(Sqist L)

{ // 操作结果:构造一个空的顺序线性表---------------1

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//运行到这里就出错
L->length=0; // 空表长度为0
L->listsize=LIST_INIT_SIZE; // 初始存储容量
return 1;

}

int main(int argc, char *argv[])
{

SqList mylist;
InitList(&mylist);
return 0;
}
  • 打赏
  • 举报
回复

typedef struct SqList_l //最好别同名

{

ElemType *elem; // 存储空间基址

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

}*SqList;

int main(int argc, char *argv[])
{

SqList mylist;
mylist=(SqList_l *)malloc(sizeof(SqList_l); //给指针分配空间
InitList(mylist);
return 0;
}

Status InitList(SqList &L) //最好传引用

{ // 操作结果:构造一个空的顺序线性表---------------1

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//运行到这里就出错
L->length=0; // 空表长度为0
L->listsize=LIST_INIT_SIZE; // 初始存储容量
return OK;

}


水晶魔法师 2009-04-15
  • 打赏
  • 举报
回复
不出错才怪呢。
SqList mylist 相当于一个指针,你没有为它分配空间,L->elem就会出错了,函数外就应该malloc(sizeof(你的结构体大小))
mengde007 2009-04-15
  • 打赏
  • 举报
回复
代码不完整……
sherrik 2009-04-15
  • 打赏
  • 举报
回复
错误发来看看 代码不完整运行不起来
jackyjkchen 2009-04-15
  • 打赏
  • 举报
回复
你这是数据结构书上的吧,我数据结构很烂……

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧