Chiarimento realloc

di il
4 risposte

Chiarimento realloc

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

  • Re: Chiarimento realloc

    Non si capisce il dubbio ... Se proponi il codice e lo commenti é meglio
  • Re: Chiarimento realloc

    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:)
  • Re: Chiarimento realloc

    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);
    
  • Re: Chiarimento realloc

    Funziona grazie mille!!:)
Devi accedere o registrarti per scrivere nel forum
4 risposte