【发布时间】:2013-09-25 19:33:12
【问题描述】:
我正在使用这两个结构,第一个保存员工信息,第二个保存列表信息:
typedef struct ListNodeTag{
int idNumber;
struct ListNodeTag *next;
} Employee;
typedef Employee Item;
typedef struct {
int size;
Item *head;
} List;
程序启动时,列表用这个函数初始化:列表在我的main中声明为List L;并像这样调用:Initialize (&L);
void Initialize (List *L) {
L->size = 0;
L->head = NULL;
}
从这里,我能够正确地将列表大小设置为 0。
然后我继续使用这两个函数将 Employee's 添加到列表中。第一个 (EmployeeCreation) 创建员工,而第二个 (Insert) 获取它并将其插入到列表中。该员工在我的主要声明为 Employee E;并像这样调用 EmployeeCreation(XXX, &E);
void EmployeeCreation (int idNumber, Employee *E) {
E->idNuber = idNumber;
E->next = NULL;
}
void Insert (Item X, int position, List *L) {
int i;
Item *currentPtr,*previousPtr;
if(L->head == NULL)
L->head = &X;
else{
currentPtr = L->head;
for(i=0;i<position;i++){
previousPtr = currentPtr;
currentPtr = currentPtr->next;
}
previousPtr->next = &X;
X.next = currentPtr;
L->size = L->size + 1;
}
}
当使用 4 个 ID 的测试文件运行时。第一个被正确读入并保存到列表中。第二个,替换第一个,列表长度加1(这部分我懂)。在此之后,程序段故障。这个错误会在我的程序中发生在哪里?即使 Insert 函数想要覆盖已经占用的位置,我认为它应该腾出空间并在新位置缝合。
【问题讨论】:
-
这不会编译 - 因为数据结构
Employee没有成员name。那么为什么要给出实际编译的代码呢? -
我已经删除了,为简单起见,我删除了一些代码。
-
Insert函数中的Item是什么?
-
Item 已被定义为 Employee 结构体
-
@user2225940 - 很简单,但删除代码使其甚至无法编译,这并没有让我们有战斗的机会。
标签: c pointers data-structures struct linked-list