C++; 我试图在C++中堆上创建一个二维整数数组。我错误地这样做了: int** a = new int*[5][6];

C++; 我试图在C++中堆上创建一个二维整数数组。我错误地这样做了: int** a = new int*[5][6];,c++,arrays,C++,Arrays,IDE没有显示任何错误,但在编译时,我发现以下错误: 错误:无法在初始化时将“int*(*)[6]”转换为“int**” 我找到了创建二维数组的有效方法,但我只是好奇上面到底发生了什么,以及错误是什么意思?< < /P> < P> C++中的固定大小数组用 STD::数组< /COD>:< /P>拼写。 std::array<std::array<int,5>,6> arr; 您几乎不应该将new与其中任何一个一起使用(或与此相关的任何其他地方)。但如果你真的必须这样做

IDE没有显示任何错误,但在编译时,我发现以下错误:

错误:无法在初始化时将“int*(*)[6]”转换为“int**”


我找到了创建二维数组的有效方法,但我只是好奇上面到底发生了什么,以及错误是什么意思?< < /P> < P> C++中的固定大小数组用<代码> STD::数组< /COD>:< /P>拼写。

std::array<std::array<int,5>,6> arr;
您几乎不应该将
new
与其中任何一个一起使用(或与此相关的任何其他地方)。但如果你真的必须这样做,没问题:

auto arr = new std::array<std::array<int,5>,6>;
auto-arr=new std::array;

事实上,这应该很少需要。更喜欢将数组包装在面向问题的类中,并使用智能指针管理所述类的堆分配对象。

可能与我读到的相同。但是找不到我上面所做的那种初始化。@Venky发生的是,你在这个问题上遇到了问题,加上一个额外的(不必要的和不正确的)
*
导致类型错误。你能详细说明一下吗?。我读了另一个答案,在任何地方都找不到这种初始化,为什么IDE没有显示任何错误,但当我编译时,我得到了它?。我正在使用Jetbrains Clion。@Venky IDE与此无关,请忽略这一点(它通常不会捕获类型问题)。编译器试图对此进行编译,发现您正试图将指向整数指针数组(
int*(*)[6]
)的指针分配给指向整数(
int**
)的指针,多亏了这一点。我想知道问题中的代码发生了什么,并解释错误。
auto arr = new std::array<std::array<int,5>,6>;