Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Allocare matrice bidimensionale
Forum - C/C++ - Allocare matrice bidimensionale

Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 0:45
Mercoledì, 01/08/2012
Ragazzi, per allocare in memoria attraverso malloc() una matrice a due dimensioni va bene questo metodo oppure mi potrebbe dare delle seccature?
Codice sorgente - presumibilmente C++

  1. float **ar;
  2.  
  3. void allocc(int x, int y){
  4. int i;
  5.  
  6. ar=malloc(x*sizeof(float));
  7. for(i=0;i<x;i++){
  8.         ar[i]=malloc(y*sizeof(float*));
  9. }
  10. }


PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 8:45
Mercoledì, 01/08/2012
Si va bene.

Ultima modifica effettuata da dmr il 01/08/2012 alle 8:45


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 19:44
Mercoledì, 01/08/2012
Ok. Però vorrei togliermi un dubbio. Si può fare in modo che sia la funzione, in questo caso allocc(), a prendere come parametro il nome del puntatore e quindi poter utilizzare la stessa funzione per dichiarare più matrici con nomi diversi?

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 20:53
Mercoledì, 01/08/2012
Si basta che fai:
Codice sorgente - presumibilmente C++

  1. float **allocc(int x,int y)
  2. {
  3.   float **matrice;
  4.   int i;
  5.   matrice=malloc(x*sizeof(float)); // da qui inizia l'allocazione
  6.   for(i=0;i<x;i++)
  7.   {
  8.     matrice[i]=malloc(y*sizeof(float));
  9.   }
  10.   return matrice; // ritorna il puntatore
  11. }


La funzione ritorna un puntatore alla matrice allocata.
Nel main la chiami cosi:
Codice sorgente - presumibilmente C/C++

  1. float **matrice;
  2. matrice=allocc(10,22);


Ultima modifica effettuata da dmr il 01/08/2012 alle 21:14


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 2:36
Giovedì, 02/08/2012
Ah ok, grazie. Pensavo che essendo un doppio puntatore avrei dovuto trattarlo diversamente da un semplice puntatore...

PM Quote