[C]malloc realloc

di il
5 risposte

[C]malloc realloc

Dunque... Inizio col codice, semplice semplice e ridotto all'osso (al punto dove crasha ovviamente :D)

int main(int argc, char *argv[]){

int* prova = malloc (sizeof(int));
int provaIndex;
for (provaIndex = 0; provaIndex < 10; provaIndex++){
prova[provaIndex] = 1;
prova = realloc(prova, (provaIndex + 1) * sizeof(int));
}
}

So che la realloc andrebbe usata con un temp (ma il punto non è quello, crasha lo stesso e per semplicità l'ho assegnata direttamente a "prova").
Ovviamente potrei passare alla malloc iniziale "10 * sizeof(int)" al posto di "sizeof(int)" ma io ho bisogno di capire perchè la realloc mi dà questo errore (nel mio codice non so quanti elementi dovrò inserire)

Le cose che più mi inquietano sono 2:
1) Crasha all'ottava iterazione O_O
2) Lo stesso codice senza "prova[provaIndex] = 1;" non crasha

Come mai?
Grazie delle risposte...

5 Risposte

  • Re: [C]malloc realloc

    Crasha perchè scrivi fuori dall'allocazione!
    Alla prima realloc:
    ProvaIndex=0 + uno = 1 --> != 2 oh no?!
  • Re: [C]malloc realloc

    Sì effettivamente hai ragione... ora non ho il codice originale a portata di mano (se fosse davvero così sarei proprio un pollo)...
    ma resta la domanda più grande:

    come mai crasha all'ottava iterazione? non dovrebbe crashare alla seconda?
  • Re: [C]malloc realloc

    Scrivere fuori allocazione non viene segnalato se non quando entra in conflitto con altre zone mappate.
    Prendi esempio il post vicino a questo. il ragazzo sbaglia a scrivere e il programma gli funziona...
    ma se tu esegui tot volte prima o poi si incarta.
    A volte è difficile scovarli . bisogna usare alcuni tools specifici.

    sry sto scrivendo da un cell

    bye
  • Re: [C]malloc realloc

    Direi che ha decisamente senso... appena risono sul pc dove c'ho il codice controllo
  • Re: [C]malloc realloc

    Risolto : D Grazie mille!! Sono ufficialmente un pollo... Era veramente semplice ma alle volte quando uno vede così tante volte il proprio errore ci s'abitua... una volta riempii un compito di 2 alla terza = 6 : P
    Grazie davvero
Devi accedere o registrarti per scrivere nel forum
5 risposte