为什么一个二维数组会导致段错误,而另一个不会?

允儿

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

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

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

这会导致段错误。

这些有什么区别?

纳撒尼尔·德梅肯

静态数组位于堆栈中,因此它不会出现段错误,因为程序可以访问自己的堆栈。但是,如果超出堆栈范围,则可以对静态数组进行段错误。

另一方面,动态数组(指针)位于堆中。因此,通过超出范围,您会要求在程序的专用内存位置之外获得一个指针,这会导致段错误。

这称为未定义行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用另一个二维数组索引一个二维数组

用另一个数组填充一个二维数组

为什么对二维数组应用间接寻址会提供一个指针?

为什么更改二维数组中的一个条目会更改整列?

创建一个包含另一个类的二维数组的类

二维数组,一个已知,另一个未知

在另一个包含多个二维数组的数组中查找二维数组的最快方法

如何检查二维数组是否在另一个二维数组中

用另一个二维数组中的行替换 numpy 二维数组中的行

用另一个二维数组中的列替换二维 numpy 数组中的列

Numpy:如何在另一个二维数组中找到二维数组的参数

在另一个二维数组中查找 numpy 二维数组的行索引

将二维数组的元素复制到另一个二维数组中

将二维数组作为参数传递给函数并获取另一个二维数组

为什么在动态分配的数组上调用delete会导致一个崩溃,而另一个不会崩溃?

在另一个二维数组中搜索数组

通过另一个不同大小的数组分配一个二维数组的子集

将一个二维数组的坐标复制到另一个数组

在递归函数中调用另一个函数会导致错误。为什么?

为什么一个 .get_rect() 调用会引发错误而另一个不会?

php检查一个二维数组中的所有值是否都在另一个二维数组中

Google Apps 脚本:根据另一个二维数组的最近时间戳过滤一个二维数组

将元素从一个二维数组添加到另一个二维数组 Java

如何在另一个函数中访问此二维数组?

从 C 中的另一个函数访问二维数组

用另一个图案替换二维数组中的图案

如何在JavaScript中检测二维数组的另一个值?

如何检查一个整数是否等于二维数组中的另一个?

Python:根据某些条件从另一个一维数组替换二维数组中的值