Buongiorno, devo svolgere un esercizio in cui si alloca una matrice di n righe e m colonne e la si riempe con numeri casuali.
dopodichè bisogna scrivere una funzione che esegua la matrice trasposta.
sotto incollo il mio file.cpp.
Quello che non capisco è il fatto che il terminale segnali una segmentation fault, mentre se eseguo lo stesso identico comando della funzione nel main (senza quindi usare la funzione void) il programma gira senza problemi e stampa i risultati correttamente.
grazie in anticipo.
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <ctime>
using namespace std;
void trasposta (double**, int, int, double**);
int main() {
int n, m, r, c;
double **matrix, **trasp;
cout << "Num di righe della matrice? ";
cin >> n;
cout << "Num di colonne della matrice? ";
cin >> m;
matrix=new double *[n];
for (int i=0; i< n; i++) {
matrix[i]=new double [m];
}
srand(time(NULL));
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
matrix[i][j]=rand()%10;
}
}
ofstream fout("matrix.dat");
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
fout << setw(15) << fixed << setprecision(1) << matrix[i][j];
}
fout << endl;
}
fout << '\n' << '\n';
trasposta (matrix, n, m, trasp);
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
fout << setw(15) << fixed << setprecision(1) << trasp[i][j];
}
fout << endl;
}
fout.close();
for (int i=0; i<n; i++) {
delete [] matrix[i];
}
for (int i=0; i<m; i++) {
delete [] trasp[i];
}
delete [] matrix;
delete [] trasp;
return 0;
}
void trasposta (double **matrix, int n, int m, double **trasp) {
trasp=new double *[m];
for (int i=0; i<m; i++) {
trasp[i]=new double [n];
}
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
trasp[i][j]=matrix[j][i];
}
}
}