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.

È stato utile?

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 ++

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top