关于c/c++分割错误的问题

An issue about c/c++ Segmentation fault

本文关键字:错误 问题 分割 c++ 关于      更新时间:2023-10-16

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

    #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;
    }

为什么c++会出现"分段错误"?顺便说一下,我的操作系统是ios x64。

谢谢川

array是指向数组的指针,显然您已经知道了。但是,您从未为实际数组分配内存,即您的指针指向"无处"。您正在尝试访问不存在的东西,这通常会导致分割错误。

例如,可以声明一个实际的数组

int array10x10[10][10];

,让指针指向它

array = array10x10;

(更准确地说,指针现在指向array10x10中第一个包含10个元素的子数组)。在此之后,您的代码将正常工作,这意味着通过访问array[i][j],您将间接访问array10x10[i][j]

如果你愿意,你也可以在动态内存中分配实际的数组

array = new int[10][10];

(只是别忘了在结尾加一个delete[] array)

array声明为指针数组,然后将其用作数组的数组。

你必须声明它是多维的:

int array[10][10];