2011-10-26 12 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; 
} 

यह प्रोग्राम सेगमेंटेशन गलती का एक कारण है, लेकिन अगर मैं 1023 के रूप में एन को परिभाषित करता हूं, तो प्रोग्राम सही तरीके से काम करेगा। ऐसा क्यों होता है?सेगमेंटेशन फॉल्ट, बड़े सरणी

+0

वैसे भी आप केवल मुख्य डायगोना भरते हैं मैट्रिक्स ए और बी के एल। –

+0

ऑरेलियो डीरोसा, यह एकमात्र उदाहरण है, मेरे कार्यक्रम में मुझे इसी तरह की समस्या का सामना करना पड़ा। –

उत्तर

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: यह आवश्यक नहीं है कि कंपाइलर तक - कई वातावरण में स्टैक आकार रन-टाइम –

संबंधित मुद्दे