【发布时间】:2015-05-15 12:30:00
【问题描述】:
不插入也不保留下一个和上一个节点的地址:我正在尝试从文件中读取输入;它可以正确读取所有数据,并根据每一行创建一个 Aeronava 对象。插入似乎不起作用。有什么建议吗?
void insertFAV_Av(FAVnode*list, Aeronava *av){
FAVnode* nn = (FAVnode*)malloc(sizeof(FAVnode));
//first = list;
nn->infoUtil = (Aeronava*)malloc(sizeof(Aeronava));
nn->infoUtil->idAeronava = (char*)malloc(strlen(av->idAeronava) + 1);
//strcpy(nn->infoUtil->idAeronava, av->idAeronava);
nn->infoUtil = av;
if (first == NULL){
nn->prev = nn->next = nn;
first = nn;
}
else{
list = first;
while (list->next != first){
list = list->next;
}
nn->prev = list;
list->next = nn;
nn->next = first;
}
}
struct Aeronava{
char* idAeronava;
tipA tipAero;
short int nrLocuri;
double greutateMaxima;
};
struct FAVnode{
FAVnode*next;
FAVnode*prev;
Aeronava* infoUtil;
};
【问题讨论】:
-
标准警告:请do not cast
malloc()和C中的家人的返回值。 -
如果有
nn->infoUtil = av;,你为什么要先malloc()ed?除了anaything,这是一个内存泄漏。 -
请详细说明“不插入”是什么意思; 应该发生什么,以及相反会发生什么。
-
insert 这里的意思是,根据作为参数发送的对象创建一个新节点并将其插入到列表的末尾
-
如果它是双重链接的,你不需要遍历整个列表来找到它的结尾。只需使用
list = first->prev。
标签: c linked-list insert circular-list