Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Allocazione dinamica

  1. #1

    Allocazione dinamica

    Ciao a tutti
    Ho un problema sull'allocazione dinamica.
    Devo allocare una matrice.
    Per farlo creo una funzione apposita.
    Quindi:

    codice:
    main()
    {
       ...
       FILE *file_testo;
       char **matrice;
       ...
       carica_matrice(file_testo, matrice);
       ...
    }
    La funzione carica_matrice pesca dei caratteri all'interno di un file ed è fatta così:
    codice:
    void carica_matrice(FILE *fp, char **matr)
    {
       ...
       matr=(char**)malloc(10*sizeof (char *))
       ...
       matr[i]=(char*)malloc(10*sizeof (char))
       ...
    }
    Come mai quando la funzione ritorna il controllo al main, la matrice va persa?
    Ho verificato che la funzione carica la matrice.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se un parametro viene passato per dover essere modificato, deve essere passato per puntatore. Nel tuo caso, il puntatore a puntatore deve essere passato per puntatore.
    Quindi

    codice:
    void carica_matrice(FILE *fp, char ***matr)
    {
       *matr=(char**)malloc(2*sizeof (char *));
       **matr=(char*)malloc(10*sizeof (char));
       *((*matr)+1)=(char*)malloc(10*sizeof (char));
    }
    
    void main()
    {
       FILE *file_testo = NULL;
       char **matrice = NULL;
    
       // ...
    
       carica_matrice(file_testo, &matrice);
    }

  3. #3
    Perchè 3 malloc?
    Perchè nella prima hai messo 2*sizeof?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ho fatto un esempio di matrice 2 x 10

    Tu avevi una matrice 10 x 10

  5. #5

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.