PROBLEMA [c] creazione matrice in funzione

fenigo69

Utente Attivo
346
19
Salve a tutti, ho un semplice dubbio, è possibile inizializzare una matrice in una funzione ausiliaria e poi ripassarla al main? Mi spiego meglio, sò bene che posso creare una matrice nel main, poi passarla ad una funzione e modificarne il contenuto, quello che non capisco è se è possibile anche crearla in una funzione ausiliaria e poi utilizzarla nel main. Il mio dubbio perchè credo che il "malloc" chiamato nella funzione, crei la matrice nello heap, rendendola quindi invisibile al main...confermate? Esiste un altro modo per fare ciò? Allego anche un codice esempio per aiutarvi a capire meglio la mia domanda(scusate so che non mi sono spiegato proprio nel migliore dei modi...)

Codice:
int legge(char **a, int *len) {

  int i;
  scanf("%d", len);
  if(*len <= 0) return 1;

  a=malloc(*len * sizeof(char*));


  for( i = 0; i < *len; i++ ) {
      a[i]=malloc(101*sizeof(char));
  scanf("%s",a[i]);
  printf("%s",a[2]);/*prova*/}
 
  return 0;

}
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
Si, si può fare (almeno in c++ ma suppongo sia lo stesso in c... altrimenti ignora il mio reply xD), ecco come:

Codice:
const unsigned MATRIX_SIZE = 3;

int** MakeMatrix(int size)
{
    // make a pointer to array of pointer
    int** matrix = new int*[size];
    for (size_t i = 0; i < size; i++)
    {
        //make an array (an array is a pointer)
        matrix[i] = new int[size];
        //set initial value to 0
        for (size_t j = 0; j < size; j++)
        {
            matrix[i][j] = 0;
        }
    }
    return matrix;
}


int main()
{
    int** Matrix = MakeMatrix(MATRIX_SIZE);

    //print content
    for (size_t i = 0; i < MATRIX_SIZE; i++)
    {
        for (size_t j = 0; j < MATRIX_SIZE; j++)
        {
            cout << Matrix[i][j] << " ";
        }
        cout << endl;
    }

}

Risultato:
0 0 0
0 0 0
0 0 0

E si, l'array si trova nell'heap e quindi non ne devi perdere il pointer. (e non dimenticare di fare delete, come nel mio esempio :S)
 
Ultima modifica:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili