PDA

Visualizza la versione completa : [C++] Far puntare una matrice ad un altra matrice?


Lodin
29-03-2015, 18:16
Ciao a tutti, sono ore che perdo tempo su questo problema e non riesco a venirne a capo.

Ho fatto questa funzione:

void trasposta_matrice(int **matrice, int &m, int &n)
{
int **trasposta = NULL;
int t;


trasposta = alloca_matrice(n, m);


for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
trasposta[j][i] = matrice[i][j];
}
}

dealloca_matrice(matrice, m, n);

stampa_matrice(trasposta, n, m);
cout<<"OK"<<endl;

*matrice = *trasposta;

delete[] trasposta;

t=m;
m=n;
n=t;

}

La funzione dovrebbe effettuare la trasposta di una matrice (anche non quadrata), quindi ho pensato di creare a runtime una nuova matrice "trasposta" di dimensione nxm rispetto alla matrice da trasporre "matrice" di dimensione mxn.
Fatto ciņ, copio gli elementi che stanno all'interno di "matrice" nella matrice "trasposta" ma con colonne e righe invertite.
Stampando la matirce "trasposta", nessun problema... tutto va come deve andare.
Ora, visto che vorrei che nella matrice data come parametro ci sia la matrice trasposta, vorrei far puntare il **matrice alla stessa locazione di memoria di trasposta per poi cancellare la matrice non trasposta.
Fatto ciņ, scambio i valori di m e n.

L'effetto finale dovrebbe essere quello di aver ottenuto la matrice trasposta nella stessa variabile puntatore che si utilizza all'inizio, il problema č che mi ritrovo una matrice con la prima riga trasposta correttamente e gli elementi restanti tutti sballati.
Come posso risolvere?

Spero di essermi spiegato bene, se avete bisogno di chiarimenti chiedete


GRAZIE MILLE!

Samuele_70
29-03-2015, 22:23
La funzione per cambiare il valore di matrice, deve ricevere matrice per riferimento.
Non devi deallocare la nuova matrice trasposta altrimenti la funzione diventa inutile, in ogni caso quella deallocazione non č effettuata correttamente.


void trasposta_matrice(int **&matrice, int &m, int &n)
{
int **trasposta = alloca_matrice(n, m);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
trasposta[j][i] = matrice[i][j];
dealloca_matrice(matrice, m, n);
matrice = trasposta;
int t=m;
m=n;
n=t;
stampa_matrice(matrice, n, m);
}

Loading