PDA

Visualizza la versione completa : [C++] Array dinamici multidimensionali e bus error


tv9vision
17-12-2005, 12:40
Ciao a tutti,
devo creare un programma che genera una matrice N x N dinamica. Il problema è che il mio codice funziona perfettamente per N < 5 dopodiché mi restituisce l'errore "Bus error". Sapete dirmi come mai?


Il sorgente è il seguente:


#include <iostream>
using namespace std;

int main(){
int dim, i, j;
int ** m = new int*[dim];


cout << "Choose the dimension of the squared matrix: ";
cin >> dim;


for(i=0;i<dim;i++){
m[i] = new int[dim];
}



for(i=0;i<dim;i++){ // Righe

for (j=0;j<dim;j++){ // Colonne
m[i][j] = i*dim + (j + 1);
}


}


for(i=0;i<dim;i++){ // Righe

for (j=0;j<dim;j++){ // Colonne
cout << " " << m[i][j] << " ";
}
cout << endl;
}

return 0;
}

tv9vision
17-12-2005, 12:45
Hahha adesso ho scoperto che funziona anche con i numeri dal 125 in poi... sapete spiegarmi come mai?


Thx

pprllo
17-12-2005, 12:56
L'errore è all'inizio e sinceramente non so come faccia il programma a funzionare per qualunque numero ...


int dim, i, j;
int ** m = new int*[dim];

Qui dim non è definito o è uguale a 0, per cui l'allocazione che fai non ha alcun significato.
Codice corretto:


#include <iostream>
using namespace std;

int main(){
int dim, i, j;
int **m;


cout << "Choose the dimension of the squared matrix: ";
cin >> dim;

m = new int*[dim];
for(i=0;i<dim;i++){
m[i] = new int[dim];
}

for(i=0;i<dim;i++){ // Righe

for (j=0;j<dim;j++){ // Colonne
m[i][j] = i*dim + (j + 1);
}


}


for(i=0;i<dim;i++){ // Righe

for (j=0;j<dim;j++){ // Colonne
cout << " " << m[i][j] << " ";
}
cout << endl;
}

return 0;
}

Così dovrebbe andare.

tv9vision
17-12-2005, 13:01
Scusa, mi vergogno della banalità dell'errore. Sono le tipiche cose che ti sfuggono dagli occhi;)

Che figura;) hehehe

Grazie mille!

Loading