C多维数组导致分段错误(GCC)

psi*_*lia 2 c arrays gcc

为什么我改变一个数组维度的大小我得到一个运行时错误:"分段错误?".例:

#include <stdio.h>
#define DIM 8 
int main(int argc, char **argv)
{
    int a[3][3][3][3][3][3][3][3][3][3][DIM],
        b;
    a[1][1][1][1][1][1][1][1][1][1][1] = 2;
    b=a[1][1][1][1][1][1][1][1][1][1][1];
    printf("%d \n",b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果DIM为8,则不会产生运行时错误,但只要DIM大于8,就会导致运行时错误"Segmentation Fault".为什么???

int*_*nt3 7

几乎可以肯定是堆栈溢出.你正在分配什么,3 ^ 10*9*sizeof(int)字节!请int *a = (int*)malloc(N * sizeof(int))改用,其中N是您想要的整数.然后你可以模拟它上面的N维数组.

我将解释如何在一维数组上模拟二维数组.假设它有一行宽度为10.然后你通过获取第三行的第五个值a[10 * 2 + 5].一般来说,你这样做a[width * (row - 1) + column].

第二种方法.您可以分配指向int的指针数组:

int **a = (int**)malloc(rows * sizeof(int*))
for (int i=0; i<row; ++i)
    a[i] = (int*)malloc(columns * sizeof(int))
Run Code Online (Sandbox Code Playgroud)

......将其扩展到更多维度,作为读者的练习.