我正在尝试使用函数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(CCD_ 1,但它不断给出分割错误。我们将不胜感激。
tete->suiv
在中未初始化时使用
cour = tete->suiv;
更改
tete->prec = tete;
tete->prec = tete;
至
tete->prec = tete;
tete->suiv = tete;
由于cour = tete->suiv;
,您出现分段故障
最初,两个指针都应分配给tete
cour->suiv = tete;
cour->suiv = tete;
您从未将tete->suiv
设置为任何值。在main
中,您可能是指
tete->prec = tete;
tete->suiv = tete;