我从这个算法中得到了一个分段错误(核心转储).为什么?
使用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)
您可能超过了堆栈大小.
如果您正在使用大型值K和N,考虑将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)