有几种方法可以定义二维数组。
我发现在使用以下代码定义数组时:
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] 删除。
我来说两句