INFORMATICA - passaggio di matrice dinamica a funzione

benedetto.mana
Salve, ho un problema con un esercizio in linguaggio C. Ho una matrice, allocata dinamicamente nel main, e vorrei passarla ad una funzione che ci farà delle operazioni. Non riesco però ad effettuare correttamente il passaggio. Ho provato con il seguente prototipo di funzione
void function(int r, int c, int matr[][c]);
, e nel main ho fatto la seguente chiamata
function(r, c, matrice);
, dove r e c sono le dimensioni della matrice, e la matrice l'ho dichiarata come
int **matrice
. Purtroppo così non va. L'allocazione e il riempimento della matrice nel main sono corretti, ho verificato facendomela stampare nel main stesso. Se però la passo alla funzione e all'interno di tale funzione effettuo un ciclo di stampa, noto che alcuni valori sono stampati correttamente mentre altri valori sono completamente sballati. Sapete come risolvere? Vorrei cercare di mantenere la notazione con parentesi quadre [][] nel prototipo ed eventualmente anche nella chiamata dal main.
Grazie

Risposte
vict85
Il tuo problema è che
void function(int r, int c, int matr[][c]);
viene convertito in
void function(int r, int c, int (*matr)[c]);
e non in
void function(int r, int c, int *matr[]);
come tu ti aspetteresti. In definitiva usa l'ultima versione, dovrebbe funzione.

Detto questo tu stai usando più o meno consapevolmente i VLA. Questi ultimi sono standard C solo dallo standard del 99 e non sono accettati dallo standard C++. Il loro uso andrebbe quindi fatto con una certa consapevolezza e non solo in base al fatto che gcc permette di farlo anche nel C++.

In ogni caso qualsiasi delle scritture permette di usare le parentesi quadre per accedere agli elementi all'interno della funzione.

P.S.: Personalmente sono molto critico rispetto alla definizione di matrici dinamiche tramite i puntatori doppi invece di un singolo puntatore.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.