2016-09-06 6 views
2

main 함수를 실행하기 전에 세분화 오류가 발생했습니다 ("hi"는 인쇄되지 않으며 gdb는 호출이 주 기능에서 오는 것을 제외하고는 오류 라인을 언급하지 않습니다) . 오류가 발생한 곳에서 도움을받을 수있는 사람이 있습니까? 나는 오류를 온라인으로 알아 내고 서핑하려했지만 내가 가지고있는 코드 유형을 찾을 수 없었습니다.메인 실행 전에 세그먼트 화 오류가 발생했습니다.

#include<stdio.h> 

    int main(){ 
     printf("hi"); 
     double L,dx,dy,dt; 

    scanf("%lf %lf %lf %lf",&L,&dx,&dy,&dt); 

     int i,j; 
     int x=L/dx; 
     int y=L/dy; 
     double ar[1000][1000]; 
     double o1=x/2; 
     double o2=y/2; 
     int D=2; 
     double den[1000][1000]; 
     double den1[1000][1000]; 
     //printf("hi"); 

     for(i=0;i<x;i++) 
     { 
      for(j=0;j<y;j++) 
      { 
       if(i==o1 && j==o2) 
       { 
       ar[i][j]=1; 
       den[i][j]=1; 
       } 
       else 
       { 
        ar[i][j]=0; 
        den[i][j]=0; 
       } 
      } 
     } 
     //printf("hi"); 
     for(i=1;i<x-2;i++) 
     { 
      for(j=1;j<y-2;j++) 
      { 
       den1[i][j]=den[i][j]+((den[i+1][j]-den[i][j]+den[i-1][j]-den[i][j])/dx*dx+(den[i][j+1]-den[i][j]+den[i][j-1]-den[i][j])/dy*dy 
        )*dt+((den[i+1][j]-den[i][j]+den[i-1][j]-den[i][j])/dx*dx+(den[i][j+1]-den[i][j]+den[i][j-1]-den[i][j])/dy*dy)*dt; 
      } 
     } 
     for(i=0;i<x;i++) 
     { 
      for(j=0;j<y;j++) 
      { 
       printf("%lf",ar[i][j]); 
      } 
      printf("\n"); 
     } 
     printf("\n"); 
     for(i=0;i<x;i++) 
     { 
      for(j=0;j<y;j++) 
      { 
       printf("%lf",den1[i][j]); 
      } 
      printf("\n"); 
     } 
     printf("\n"); 

     return 0; 
    } 
+2

_ ""안녕하세요 "_ 시도'printf ("hi \ n "); ' –

+2

'C++'태그를 제거하지 않습니다 -'C++'가 아닌'C'를 사용하고 있습니다. – UnholySheep

답변

2

함수는 아마이 라인에 의한 너무 많은 스택 메모리를 사용

double ar[1000][1000]; 
double den[1000][1000]; 
double den1[1000][1000]; 

해결 방법 : 힙에서 메모리를 할당 : 배열을 포함

double* den = malloc(1000 * 1000 * sizeof(double)); 
etc. 
6

지역 변수, 스택에 저장됩니다. Linux의 기본 스택 크기는 8MB입니다. 배열 중 단 하나만 800 만 바이트, 1000 * 1000 * 8 (sizeof(double)은 8)입니다. 세 개의 배열이 있습니다.

이 배열을 전역으로 만들거나 동적으로 할당하십시오.

관련 문제