Chiarimento realloc

di Anonimizzato15591 il
4 risposte
Ciao, ma se io uso una realloc dentro ad una funzione quando torno al main perdo quella cella di memoria perchè era stata creata sullo stack? Mi spiego meglio, nel caso io a questa funzione gli passassi un puntatore che punta ad una struttura (dichiarato come variabile locale del main) e dentro alla funzione gli faccio puntare ad un pezzo di memoria allocato da una realloc quando torno al main questo banco di memoria è andato perduto?
Grazie!!:)

4 Risposte

  • Non si capisce il dubbio ... Se proponi il codice e lo commenti é meglio
  • Allora il codice è questo:
    struct prova
    {
    int num;
    };

    int main()
    {
    struct prova *ptr;
    allocamento(ptr);
    for(i=0; i<4; i++)
    {
    printf("Inserisci numero: ");
    scanf("%d", &(ptr+i)->num);
    fflush(stdin);
    }
    system("pause");
    return 0;
    }

    void allocamento (struct prova * ptr)
    {
    ptr = (struct prova *) realloc (ptr, sizeof(struct prova) * 5);
    if(ptr == NULL)
    {
    puts("Errore");
    system("pause");
    exit (1);
    }
    }

    Quando torno al main mi chiede di inserire un numero perche entra nel for e fin qui tutto bene ma appena lo inserisco mi crasha!
    grazie:)
  • 1) la funzione dovresti chiamarla allocazione non allocamento ...

    2) il puntatore passato deve essere inizializzato a NULL altrimenti la realloc ha problemi

    3) il puntatore ottenuto dalla realloc deve essere restituito e utilizzato nel main

    In pratica le modifiche al codice saranno ...

    Nella funzione
    
    struct prova *allocazione(struct prova * ptr)
    {
            ...
    
    	return ptr;
    }
    
    e nel main
    
    	struct prova *ptr = NULL;
    	ptr=allocazione(ptr);
    
  • Funziona grazie mille!!:)
Devi accedere o registrarti per scrivere nel forum
4 risposte