我正在尝试使用函数inserer()创建一个已排序的双向链表,以便将值插入其中。
我按如下方式编写整个程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct bi{
int val;
struct bi *prec;
struct bi *suiv;
}bil;
void inserer (int v, bil *tete)
{
bil *cour, *elt;
cour = tete->suiv;
while (cour != tete && cour->val < v)
cour = cour->suiv;
elt = (bil*) malloc(sizeof(bil));
if (elt)
{
elt->val = v;
(cour->prec)->suiv = elt;
elt->suiv = cour;
elt->prec = cour->prec;
cour->prec = elt;
}
}
int main()
{
bil* tete;
/*Creation tete fictif*/
tete = (bil*) malloc (sizeof(bil));
tete->prec = tete;
tete->prec = tete;
inserer (3,tete);
return 0;
}
然后我尝试使用该函数并插入一个值(示例中为3)
与inserer (3,tete);
但它不断给出分段错误。
帮助将不胜感激。
答案 0 :(得分:4)
tete->suiv
在
cour = tete->suiv;
更改
tete->prec = tete;
tete->prec = tete;
到
tete->prec = tete;
tete->suiv = tete;
答案 1 :(得分:3)
由于cour = tete->suiv;
最初两个指针都应分配给tete
cour->suiv = tete;
cour->suiv = tete;
答案 2 :(得分:0)
您永远不会将tete->suiv
设置为任何内容。在main
你可能意味着
tete->prec = tete;
tete->suiv = tete;