PDA

Visualizza la versione completa : [C] Liste


robyp
30-06-2004, 19:20
Salve,

Volevo sapere se questo codice puo' essere corretto o se puo' generare errore visto che compilando il codice con il compilatore lcc al ritorno mi genera un errore e la terminazione abnomala del programma. Lo scopo inserire in coda in una lista, usando l'allocazione dinamica con malloc:

queste sono le strutture:


//struttura T2, lista doppia, indica il punto avente coordinate x,y
//se il primo punto di una linea puntato da t3 tramite //puntatore definito p_punto T2

typedef struct p_punto *p_punto;
typedef struct p_punto{
int x;
int y;
p_punto next;
p_punto prev;
}punto;

//struttura T3, lista doppia,punta al punto di inizio di ogni tratta
typedef struct T3_i *L_i;
typedef struct T3_i{
int peso; //peso di ogni tratto che compone la linea/tratta
int x;
int y; //coordinate iniziali (del primo punto della tratta)
L_i next; //puntatore al sucessivo
char *percorso; //stringa contenente gli spostamenti es:2N2W...
p_punto T2;//puntatore alla struttura T2

Ecco la funzione :


L_i metti_inlista(int a, int b, int t);
while(...){
ttre=malloc(sizeof(L_i));
ttre->x=a;
ttre->y=b;
ttre->peso=t;
ttre->T2=NULL;
ttre->percorso=(dim%2==0)?c_tmp2:c_tmp1;

printf("il percorso e'' %s\n",ttre->percorso);
//INSERISCO IN LISTA T3
if(testaL_i==NULL){ //lista vuota
printf("inserisco in testa\n");
ttre->next=NULL;
testaL_i=ttre;
}
else {//la lista non vuota inserisco in coda


while(tmp1->next!=NULL)tmp1=tmp1->next;//scorro la lista
printf("tmp1:%s\n",tmp1->percorso);
ttre->next=NULL;
tmp1->next=ttre;
printf("tmp1->next:%s\n",tmp1->next->percorso);
if (ttre->next==NULL)printf("il succ al nuovo elemnto punta poi a null");
}
return ttre;//ritorna il puntatore al valore appena istanziato
}

Sarei grato se qualcuno mi risponde al pi presto perk una parte di un progetto che devo consegnare tra breve..
Non riesco proprio a capire perk nn va.. :master:

Grazie!!!

anx721
30-06-2004, 19:40
Prova a sostituire nella funzione la riga:

ttre=malloc(sizeof(L_i));

con

ttre=malloc(sizeof(struct T3_i));

:ciauz:

Loading