2011-10-26 21 views
15
#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と定義するとプログラムが正しく動作します。それはなぜ起こるのですか?セグメンテーションフォールト、大規模配列

+0

いずれにしても、主要なジアゴナ行列aと行列bのl –

+0

AurelioDeRosa、それは私のプログラムで似たような問題が発生した唯一の例です。 –

答えて

27

スタックがオーバーフローしています。 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]); 
    
  • に覚え
+0

ありがとう、その助けを –

+0

@AlexeyMatveevまたはあなたはあなたに大きなスタックを与えるためにコンパイラに伝えることができます!そのためのオプションがあります! – xanatos

+1

@xanatos:コンパイラに依存するわけではありません。多くの環境では、スタックサイズは実行時に決定されます。 –

関連する問題