紧急求助:使用了嵌套结构体的顺序表编译通过,运行出现段错误。

xinpinwei 2011-09-28 10:28:37
我想传一个car进去,然后输出number,time。下面是测试代码

#include <stdio.h>
#include <stdlib.h>
#define N 64
typedef int datatype;
typedef struct{
int number; //车牌号
int time; //到达或离开的时刻
}CarType;//,TCarType;
typedef struct
{
CarType *data;
int last;//表当前大小
int size;//顺序表容量
} sqlist;
datatype CreateEmptyList(sqlist *L)
{
L=(sqlist *)malloc(sizeof(sqlist));
L->data = (CarType *)malloc(sizeof(CarType));
L->last = -1;
L->size=N;
return 1;
}
datatype InsertList(sqlist *L, CarType x)
{ printf("jinbiao \n");
// L->data++;

L->data=&x;//之前CarType *x时,x=L->data也错
L->last++;
printf("jinbiao one\n");

printf("%d\n",L->data->time);
printf("%d",x.time);
printf("jinbiao tow\n");

return 0;
}
int main()
{
sqlist *L;
CarType car;
car.number=2;
car.time=3;
CreateEmptyList(L);
InsertList(L,car);
}
...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinpinwei 2011-10-01
  • 打赏
  • 举报
回复
非常感谢久长,你得答案是我解决问题的突破口。
hancker 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiuchang 的回复:]

下面这个函数是不正确的,应该传二级指针进去,然后消解后赋值
C/C++ code
datatype CreateEmptyList(sqlist **L)
{
*L=(sqlist *)malloc(sizeof(sqlist));
(*L)->data = (CarType *)malloc(sizeof(CarType));
(*L)->last = -1;
……
[/Quote]

对,这儿应该是传二级指针进去。在主函数中,你得改为(CreateEmptyList(&L);)
其实你上面分配这间。个人觉得可以这样做:
*L = (sqlist *)malloc(sizeof(sqlist) + sizeof(CarType));(合成一条)
jiuchang 2011-09-28
  • 打赏
  • 举报
回复
下面这个函数是不正确的,应该传二级指针进去,然后消解后赋值
datatype CreateEmptyList(sqlist **L)
{
*L=(sqlist *)malloc(sizeof(sqlist));
(*L)->data = (CarType *)malloc(sizeof(CarType));
(*L)->last = -1;
(*L)->size=N;
return 1;
}
xinpinwei 2011-09-28
  • 打赏
  • 举报
回复
还是不行啊,谁能帮我改一下,真的太太急了
mengmingtao 2011-09-28
  • 打赏
  • 举报
回复
datatype InsertList(sqlist *L, CarType x)
改为
datatype InsertList(sqlist *L, CarType& x)
试试

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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