Originariamente inviato da valia
dovrei vedere un po' tutto il codice, non solo quella sotto parte.
Quello è cmq un errore che ripeti in più punti, attento alle istruzioni di malloc
Nel senso che hai notato che faccio spesso, o che il fatto che il programma funziona è necessario ce quell errore lo faccia sempre affinchè si compensi e faccia funnzionare il tutto?
Il codice completo è questo della funzione:
ps: devo ancora mettergli i cast (anche se non capisco per il proff non ce li ha spiegati)
codice:
List crea_lista(void) {
List L = malloc(sizeof(Elem));
int ctrl;
printf("1 - Inserire primo elemento\n0 - Laciare lista vuota\n? ");
scanf("%d", &ctrl);
if(ctrl == 0) {
L = NULL;
return L;
}
List Lcpy = L;
printf("Immettere membro \"str\": ");
char s[100]; //array di supporto
scanf("%s", s);
char** stringhe = NULL; //array di puntatori a stringa
int n = 0;
stringhe = realloc(stringhe, sizeof(char*)*(n+1)); //alloco di un posto l'array di punt
stringhe[n] = malloc( sizeof(char)*(strlen(s)) ); //alloco la stringa dinamica della lunghezza che mi serve per memorizzare quello che ho preso in input
strcpy(stringhe[n], s); //copio l'input nella stringa allocata in precedenza
L->str = stringhe[n]; //faccio puntare L->str alla stringa dinamica
n++; //preparo n alla prossima iterazione
printf("Immettere membro \"val\": ");
scanf("%ld", &L->val);
printf("\n1 - Inserire altro elemento\n0 - Interrompere inserimento\n? ");
scanf("%d", &ctrl);
if(ctrl) {
while(1) {
Lcpy->next = malloc(sizeof(Elem));
Lcpy = Lcpy->next;
printf("Immettere membro \"str\": ");
scanf("%s", s);
stringhe = realloc(stringhe, sizeof(char*)*(n+1));
stringhe[n] = malloc( sizeof(char)*(strlen(s)) );
strcpy(stringhe[n], s);
Lcpy->str = stringhe[n];
n++;
printf("Immettere membro \"val\": ");
scanf("%ld", &Lcpy->val);
printf("\n1 - Inserire altro elemento\n0 - Interrompere inserimento\n? ");
scanf("%d", &ctrl);
if(!ctrl) break;
}
}
Lcpy->next = NULL;
return L;
}
Sei gentilissimo ti ringrazio infinitamente