[C] differenza malloc e realloc

di Anonimizzato11700 il
9 risposte


include <stdio.h>
#include <stdlib.h>

int main() {
int *v=NULL ;
int i, val; 
int size = 0; 

do {
printf ( "Inserire un nuovo elemento nell'array :");


scanf ("%d", &val);
v = (int*) realloc( v, (++size)*(sizeof(int)) );
v[size-1] = val; 

} while (val != -1); 


printf( "Elementi nell'array:"); // stampa normalmente l'intero array nominato v[]

for ( i=0; i < size; i++ )
printf ("%d ", v[i]);

free(v);
return 0; }


Nel mio libro di testo e' proposto questo esercizio per mostrare l'uso di realloc. Ho cercato di analizzare il più attentamente possibile questo esempio ma rifacendolo , avrei utilizzato malloc
Qualcuno potrebbe gentilmente aiutarmi a capire la differenza tra malloc e realloc ?

Ho sempre pensato che la realloc permettesse di riallocare n blocchi di memoria , senza però crearne di nuovi , a differenza di malloc. Quindi con malloc, creando nuove ri allocazioni rischierei di perdere dati ricavati in cicli svolti precedentemente e allocati in blocchi 'vecchi' della memoria


Grazie mille a tutti in anticipo

9 Risposte

  • Ho sempre pensato che la realloc permettesse di riallocare n blocchi di memoria , senza però crearne di nuovi , a differenza di malloc. Quindi con malloc, creando nuove ri allocazioni rischierei di perdere dati ricavati in cicli svolti precedentemente e allocati in blocchi 'vecchi' della memoria
    Quindi hai capito ... cosa altro non va ?
  • Il problema e' che pur sale della definizione non capisco il motivo perciò qui è' stata utilizzata la realloc .. non sono stati fatti cicli prima della realloc quindi non vedo perché utilizzarlo ..
  • Ele9 ha scritto:


    non sono stati fatti cicli prima della realloc quindi non vedo perché utilizzarlo ..
    Veramente la realloc sta all'interno di un ciclo !
  • 
    
    0001 #include<stdio.h>
    0002 #include<stdlib.h>
    0003 int main() {
    0004 
    0005 int **matrix;
    0006 
    0007 int i,j;
    0008 
    0009 int m,n;
    0010 
    0011 printf ("Numero di righe della matrice: ");
    0012 scanf ("%d",&m);
    0013 
    0014 printf ("Numero di colonne della matrice: ");
    0015 scanf ("%d",&n);
    0016 
    0017 matrix = (int**) malloc(m*n*sizeof(int));
    0018 for (i=0; i<m; i++) 
    0019 
    0020 matrix[i] = (int*) malloc(n*sizeof(int));
    0021 
    0022 
    0023 
    0024 
    0025 for (i=0; i<m; i++) 
    0026 for (j=0; j<n; j++) {
    0027 
    0028 printf ("Elemento [%d][%d]: ",i+1,j+1);
    0029 scanf ("%d",&matrix[i][j]);
    0030 
    0031 }
    0032 
    0033   printf("La matrice e':\n");
    0034 
    0035   for(i = 0; i <m; i++) {
    0036     for(j = 0; j <n; j++)
    0037       printf("%d ", matrix[i][j]);
    0038     printf("\n");
    0039   }
    0040 free(matrix);
    0041 return 0; }
    0042 
    0043 
    
    
    


    Però anche in questo esercizio c'è un ciclo for che lega le due malloc , perché in questo caso non sarebbe stato corretto usare realloc
  • Perché nel secondo caso il ciclo serve solo per riempire gli elementi allocati in precedenza con la malloc. Ma non modifichi il numero di elementi dell'array.

    Nel primo caso, nel ciclo aggiungi elementi all'array che prima ne conteneva in numero minore, conservando i dati precedenti.
  • Grazie!! Ora ho capito !
  • Ele9 ha scritto:


    Grazie!! Ora ho capito !
    Bene ...

    P.S. Ma sei tu "ellosma" che ha riempito tutti i forum con questa domanda ... ?
  • Posso appellarmi alla facoltà di non rispondere?
  • Posso chiuderti il post perche non hai letto il regolamento? Il crossposting (postare su più forum la stessa domanda) è vietato.
Devi accedere o registrarti per scrivere nel forum
9 risposte