首页 > 解决方案 > 为什么一个二维数组会导致段错误,而另一个不会?

问题描述

有几种方法可以定义二维数组。

我发现在使用下面的代码定义数组时:

int arr[2][2];
cout << arr[3][3];

这不会导致段错误。这只是打印一些虚拟值。

另一方面,

int** arr = new int*[2];
for(int i = 0; i < 2; i++) arr[i] = new int[2];
cout << arr[3][3];

这会导致段错误。

这些有什么区别?

标签: c++segmentation-fault

解决方案


读取未初始化的值是未定义的行为。您的程序无效(两种变体)并且在您这样做时没有任何意义,并且允许任何行为。编译器实际上可以做任何事情。您无法推理包含 UB 的程序,甚至不要尝试。


推荐阅读