分段错误语言c

0 c segmentation-fault

我从这个算法中得到了一个分段错误(核心转储).为什么?

使用N和K的小值时是否有效?例如,N = 100且K = 10?

#include <stdio.h>
#include <stdlib.h>

#define N 400       
#define K 30        

int main()
{
int  i,j,k;
int A[K+1][N][N];
for (i=0;i<K+1;i++)
{
  for (j=0;j<N;j++)
  {
      for (k=0;k<N;k++)
      {

           A[i][j][k]=0; 
      }

  }
}
printf("A[%i][%i][%i] \n", i, j,k);
printf("OK");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*per 6

您可能超过了堆栈大小.

如果您正在使用大型值KN,考虑将A在堆上.

int *A = malloc((K+1) * N * N * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

索引:

A[(i*(K+1) + j)*N + k]=0;
Run Code Online (Sandbox Code Playgroud)

(你想做一个函数或宏)

一旦你完成了A,

free(A);
Run Code Online (Sandbox Code Playgroud)