Originariamente inviato da jacopos81
sempre nell'argomento delle liste e altri tipi astratti.. se io ho una cosa del genere:

codice:
typedef struct {
	char *nome;
	int id;
} nodo;

int nuovo_nodo(nodo *n, char *name, int x) { 
	printf("creato nuovo nodo\n");
	n = (nodo*)malloc(sizeof(nodo));
	n->nome = (char *)malloc(sizeof(char) * 50);
	n->nome = strcpy(n->nome,name);
	n->id = x;
	return 0;
}

int main() {
	nodo n;
	int prova;
	prova = nuovo_nodo(&n,"prova",6);
	printf("nome del nodo: %s\tid: %d\n",n.nome,n.id);

return 0;
}
dov'è che sbaglio?? perche nn riesco a copiare i valori corretti passati in input (prova, 6) nei campi del nodo n ?? suppongo che sbagli qualcosa al livello di puntatori..ma non mi pare d vedere errori...

(PS: le funzioni devono necessariamente tornare valori int)
Sn un po arrugginito con le liste ma provo a risp. Dunque tu passi un puntatore alla funzione e poi ci assegni un valore all interno della funzione, questo non va bene perchè quando esci dalla funzione il puntatore che hai passato puntera alla cella a cui puntava prima della chiamata. Quindi devi passare il puntarore per "riferimento" e quindi devi passare il "puntatore a puntatore"

int nuovo_nodo(nodo **n, char *name, int x) {
printf("creato nuovo nodo\n");
(*n) = (nodo*)malloc(sizeof(nodo));
n->nome = (char *)malloc(sizeof(char) * 50);
n->nome = strcpy(n->nome,name);
n->id = x;
return 0;
}

int main() {
nodo n;
int prova;
prova = nuovo_nodo(&n,"prova",6);
printf("nome del nodo: %s\tid: %d\n",n.nome,n.id);

return 0;

prova un po cosi...spero funzioni! fammi sapere! buona giornata!