Ошибка сегментации, большие массивы

#include  #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, программа будет работать правильно. Почему так происходит?

One Solution collect form web for “Ошибка сегментации, большие массивы”

Вы переполняете стек. 2 * 1024 * 1024 * sizeof(int) много для большинства систем.

Простейшим решением было бы сделать static массивы.

 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]); 
Interesting Posts
Давайте будем гением компьютера.