我写了一个简单的程序来测试数组指针:
#include <iostream>
using namespace std;
int main(){
int (*array)[10];
int i, j;
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++)
array[i][j] = 1;
}
for (i = 0; i < 10; i++){
for (j = 0; j < 10; j++)
cout << array[i][j] << " ";
cout << endl;
}
return 0;
}
为什么g ++“分段错误”? 顺便说一句,我的操作系统是ios x64。
由于 传
答案 0 :(得分:5)
array
是一个指向数组的指针,你显然已经知道了。但是,您从未为实际数组分配内存,即您的指针指向“无处”。您正在尝试访问不存在的内容,这通常会导致分段错误。
例如,您可以声明一个实际的数组
int array10x10[10][10];
并使指针指向它
array = array10x10;
(更准确地说,您的指针现在指向array10x10
中的第一个10元素子阵列)。之后,您的代码将正常运行,这意味着访问array[i][j]
您将间接访问array10x10[i][j]
。
或者,如果您愿意,可以在动态内存中分配实际数组
array = new int[10][10];
(最后不要忘记做delete[] array
)。
答案 1 :(得分:0)
您将array
声明为指针数组,然后将其用作数组数组。
您必须将其声明为多维:
int array[10][10];