c - 段错误,大型数组

标签 c segmentation-fault

#include <stdio.h>
#define N 1024
int main(){
  int i, j;
  int a[N][N];
  int b[N][N];
  for (i=0;i<N;i++){
    a[i][i]=i;
    b[i][i]=i;
  }
  for (i=0;i<N;i++)
    for(j=0;j<N;j++)
    {
         printf("%d", a[i][j]);
         printf("%d", b[i][j]);
    }
  return 0;
}

这个程序是段错误的原因,但是如果我将N定义为1023,程序将正常工作。为什么会发生这种情况?

最佳答案

你的堆栈溢出了。 2 * 1024 * 1024 * sizeof(int) 对于大多数系统来说已经很多了。

最简单的解决方案是使数组静态

static int a[N][N];
static int b[N][N];

其他方法:

  • 使数组全局化(这本质上与上面相同)
  • 在循环中使用malloc,当然记得free

    int **a = malloc(N * sizeof *a);
    for (i = 0; i < N; i++)
        a[i] = malloc(N * sizeof *a[i]);
    

关于c - 段错误,大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196999/

相关文章:

C:传递(双重)分配

c - 从 bsearch 和 lfind 确定索引?

c - 在这种情况下 malloc 是如何工作的?

c++ - 段错误 vector < vector <列表<对象*>>> push_back

python - 在 Python C 扩展中创建 PyList_New 时出现段错误

c - 从数组中访问变量全局结构

c - 自然对数 - 奇怪的输出

c - 为什么在可执行语句后声明变量不适用于 MS C 编译器?

c++ - 尝试从特定内存地址读取

c - 打印字符串数组行时出现段错误,逐个字符打印时工作正常