有关c / c ++ Segmentation故障的问题

时间:2011-07-20 09:42:10

标签: c++

我写了一个简单的程序来测试数组指针:

    #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。

由于 传

2 个答案:

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