gpt4 book ai didi

c - 段错误,大数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:27 25 4
gpt4 key购买 nike

#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/43191487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com