用C中的宏定义2D数组:奇怪的行为



我正在将一些代码从python移植到C。在我的C代码中,我需要定义一些固定大小的2D数组。到目前为止,我已经尝试了以下代码,但没有成功:

#include <stdio.h>
#include <complex.h>
#include <math.h>
#define N 1024
int main() 
{
int aperture[N][N]; //Does not work on 2D arrays, but does with 1D arrays

float complex SLM[N][N];
return 0;
} 

在哪里我得到一个分段故障错误。但是,如果我为行和列的数量定义一个不同的宏,就像这样,问题就会消失,代码也会完美地执行:

#include <stdio.h>
#include <complex.h>
#include <math.h>
#define N 1024
#define N_COLS 1024
int main() 
{
int aperture[N][N_COLS]; 

float complex SLM[N][N_COLS];
return 0;
} 

我不知道这种行为的原因是什么。你能帮我理解吗?如果有任何情况,我使用的是VSCode和gcc编译器。

正如退休忍者所建议的那样,数组似乎对堆栈来说太大了。将它们定义为全球性解决了这个问题。

最新更新