C++ - 一维动态数组可以使用,但是二维动态数组不行。

4
我有一个代码问题。我有一些输入用于类,即nmax和mmax。这些在头文件中定义为:
int nmax;
int mmax;

然后我有一些数组,在头文件中定义为:
double* Nline;
double** NMline;

然后我想在主程序中分配它们。首先,我从输入中为nmax和max分配一个值。
nmax = nmax_in;
mmax = mmax_in;

然后我分配数组。
Nline = new double [nmax];
NMline = new double [nmax][mmax];

问题是,1D数组是以这种方式分配的。但是2D数组不是 - 编译器会写: 表达式必须具有常量值
为什么NLine被分配了而NMline没有?
我理解但不知道如何在我的程序中做到这一点,也不知道为什么对于1D数组,这种分配是可以的。 非常感谢您的帮助

你不能像这样分配二维数组。在这里搜索一下,你会找到答案的。 - Kiril Kirov
1个回答

7
double** NMline;

将声明指向指针数组的指针,但不会声明二维数组。您需要先为指针数组(行指针)分配数据:

NMline = new double*[nmax];

然后初始化每一行:

for(int i = 0; i < nmax; i++)
       NMline[i] = new double[mmax];

不要忘记先删除所有行,然后再删除NMline本身:

for(int i = 0; i < nmax; i++)
       delete [] NMline[i];
delete [] NMline;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接