Ciao a tutti, sono ore che perdo tempo su questo problema e non riesco a venirne a capo.
Ho fatto questa funzione:
codice:
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!