C, DUBBIO SU ALLOCAZIONE DELLA MEMORIA

di il
2 risposte

C, DUBBIO SU ALLOCAZIONE DELLA MEMORIA

Ciao a tutti, sono nuovo su questo forum!
Io ho un dubbio sull'allocazione della memoria!
premetto che sono alle prime armi con la programmazione.

allora...volevo sapere la differenza che c'è tra allocare un array di interi in questo modo

int a[10];
e in questo

int *a;

a=(int*) malloc(10*sizeof(int));
Inoltre quando io, con un ciclo
for(i=0; i<5; i++){

scanf("%d", &a[i[);

}
riempio 5 celle dell'array, nel primo caso le altre 5 hanno valori casuali, mentre con il malloc le rimanenti 5 celle hanno tutte valore zero.

grazie in anticipo dell'aiuto!

2 Risposte

  • Re: C, DUBBIO SU ALLOCAZIONE DELLA MEMORIA

    Lo statement
    int a[10]
    alloca il vettore sullo stack, invece
    int *a = (int*)malloc(10*sizeof(int))
    nello heap.

    Sei fortunato, perche' a quanto sembra, ma non e' previsto, l'implementazione della tua malloc si occupa anche di azzerare il contenuto del blocco di memoria allocato. Comunque non farci affidamento, perche' in generale cio' non avviene. Ed infatti, quando il vettore viene allocato sullo stack, ti ritrovi con valori casuali, che non sono altro che il precedente contenuto dello stack stesso

    Devi studiarti meglio che cosa e' lo heap e come e' organizzata la memoria di un programma.
  • Re: C, DUBBIO SU ALLOCAZIONE DELLA MEMORIA

    Oook capito, grazie mille per la velocità e per la risposta!
Devi accedere o registrarti per scrivere nel forum
2 risposte