Liste e struct in C

di il
2 risposte

Liste e struct in C

Ciao ragazzi, sapete per caso il motivo per cui non funziona questo codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct nodo{
	int ri;
	int rf;
	int ci;
	int cf;
	int identificatore;
	struct nodo* next;
	} nodo;

/*Buffer condiviso*/
typedef nodo* lista;
static lista buffer;

lista inserimento (int iri,int irf,int ici,int icf,int idi){
	lista scorri;
	lista new = malloc(sizeof(lista));
	new->ri = iri;
	new->rf = irf;
	new->ci = ici;
	new->cf = icf;
	new->identificatore = idi;
	new->next = NULL;
	if (buffer == NULL)
		return new;
	else
		{scorri = buffer;
		while (scorri->next != NULL)
			scorri = scorri ->next;
		scorri->next = new;}
	return buffer;
	}

int main(){
int i;
lista scorri;

for (i=0; i<20; i++){
	buffer = inserimento (i,i+1,0,29,i);
	}

scorri = buffer;
while (scorri->next != NULL){
	printf ("%d\n--------------", scorri->identificatore);
	scorri = scorri ->next;
	}

return 0;
}

Compila ma fallisce alla seconda iterazione del for nel main! La cosa strana è che se nel nodo della lista inserisco solo quattro int anzichè cinque funziona alla perfezione... Per esempio il seguente codice funziona:
#include <stdio.h>
#include <stdlib.h>

typedef struct nodo{
	int ri;
	int rf;
	int ci;
	int cf;
	struct nodo* next;
	} nodo;

/*Buffer condiviso*/
typedef nodo* lista;
static lista buffer;

lista inserimento (int iri,int irf,int ici,int icf){
	lista scorri;
	lista new = malloc(sizeof(lista));
	new->ri = iri;
	new->rf = irf;
	new->ci = ici;
	new->cf = icf;
	new->next = NULL;
	if (buffer == NULL)
		return new;
	else
		{scorri = buffer;
		while (scorri->next != NULL)
			scorri = scorri ->next;
		scorri->next = new;}
	return buffer;
	}

int main(){
int i;
lista scorri;

for (i=0; i<20; i++){
	buffer = inserimento (i,i+1,0,29);
	}

scorri = buffer;
while (scorri->next != NULL){
	printf ("%d\n--------------", scorri->ri);
	scorri = scorri ->next;
	}
return 0;
}

Grazie mille in anticipo a chi mi aiuterà

2 Risposte

  • Re: Liste e struct in C

    Quando allochi un nuovo modo devi usare sizeof(nodo)
  • Re: Liste e struct in C

    oregon ha scritto:


    Quando allochi un nuovo modo devi usare sizeof(nodo)
    Ora funziona, grazie mille! Anche se ancora non capisco il perchè in un caso funziona e nell'altro no!
Devi accedere o registrarti per scrivere nel forum
2 risposte