Arresto anomalo dell'array dinamico C ++ 2D
-
10-07-2019 - |
Domanda
Ciao, ho qualche problema con l'array dinamico 2D.
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
M[0][0] = 1.0;
...
}
Il programma funziona ma vorrei inizializzare l'array 2D usando tale funzione:
void initialize2D(double **M,int M_dimension)
{
int i;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
}
Finalmente il programma si presenta così:
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
initialize2D(M,M_dimension);
M[0][0] = 1.0; //crash
...
}
Sfortunatamente si blocca su M [0] [0] = 1.0;
Grazie per qualsiasi aiuto o suggerimento.
Soluzione
Stai passando M
per valore, anziché per riferimento. initialize2D
deve modificare il valore del puntatore a puntatore M
in modo che punti alla memoria allocata
Prova invece a cambiare la firma della tua funzione con questa:
void initialize2D(double **&M,int M_dimension)
o
void initialize2D(double ***M,int M_dimension) {
...
*M = new double *[M_dimension];
...
}
Altri suggerimenti
Per poter funzionare, è necessario passare un riferimento a double **
anziché double **
, altrimenti la modifica apportata a un puntatore dopo aver assegnato a M il risultato di nuovo
perdersi all'uscita da una funzione.
quale potrebbe essere il problema è dove si dichiara un parametro intero come int M_dimension void initialize2D (double ** M, int M_dimension)
e quindi inizializzando l'array dinamico come: M [i] = new double [M_dimension];
dove arriva la contraddizione perché hai dichiarato la variabile M_dimension come numero intero e poi l'hai usata come doppio
provalo in questo modo: modificare il tipo di dati dell'array o M_dimension, quindi entrambi hanno lo stesso tipo di dati.
speriamo che questo ti possa aiutare
Perché non usi std :: vector
o Boost.MultiArray
Sarebbe abbastanza facile definire un array a 2 dimensioni come vettore generico di vettori in C ++