嗨,我对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;

...
}

程序有效,但我想使用这样的函数初始化2D数组:

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];
   }
}

最后,程序看起来像这样:

int main()
{
   double **M;
   int M_dimension;
   int i;

   M_dimension = 10;

   initialize2D(M,M_dimension);        

   M[0][0] = 1.0; //crash

...
}

不幸的是它在M[0][0] = 1.0;

崩溃了

感谢您提供任何帮助或建议。

有帮助吗?

解决方案

您按值传递M,而不是按引用传递。 initialize2D需要更改指针指向<=>的值,使其指向已分配的内存

请尝试将功能签名更改为:

void initialize2D(double **&M,int M_dimension)

或者

void initialize2D(double ***M,int M_dimension) {
    ...
    *M = new double *[M_dimension];
    ...
}

其他提示

您需要将引用传递给double**而不是new才能运行,否则在分配M之后对指针进行修改<=>在退出函数时会丢失。

问题可能在于您声明整数参数,例如int M_dimension void initialize2D(double ** M,int M_dimension)

然后将动态数组初始化为: M [i] =新双[M_dimension];

因为你将变量M_dimension声明为整数然后将其用作双精度

以这种方式尝试: 要么更改数组的数据类型,要么更改M_dimension,那么它们都具有相同的数据类型。

希望这会帮助你

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top