[C] differenza malloc e realloc

di il
9 risposte

[C] differenza malloc e realloc



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

  • Re: [C] differenza 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
    Quindi hai capito ... cosa altro non va ?
  • Re: [C] differenza malloc e realloc

    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 ..
  • Re: [C] differenza malloc e realloc

    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 !
  • Re: [C] differenza malloc e realloc

    
    
    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
  • Re: [C] differenza malloc e 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.
  • Re: [C] differenza malloc e realloc

    Grazie!! Ora ho capito !
  • Re: [C] differenza malloc e realloc

    Ele9 ha scritto:


    Grazie!! Ora ho capito !
    Bene ...

    P.S. Ma sei tu "ellosma" che ha riempito tutti i forum con questa domanda ... ?
  • Re: [C] differenza malloc e realloc

    Posso appellarmi alla facoltà di non rispondere?
  • Re: [C] differenza malloc e realloc

    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