2016-09-06 8 views
2

Ich übe c und vor Segmentierung Fehler vor der Hauptfunktion ausgeführt ("Hallo" druckt nicht und sogar gdb ist nicht die Zeile des Fehlers erwähnen, außer dass der Anruf von der Hauptfunktion ist) . kann mir bitte jemand helfen woher der fehler stammt? Ich habe versucht, herauszufinden und surfen für den Fehler online, konnte aber nirgends für die Art von Code finden, die ich habe.Segmentierungsfehler vor der Ausführung von Haupt

#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

_ "" hi "druckt nicht" _ Versuchen Sie 'printf (" hi \ n ");' –

+2

entfernen Sie das 'C++' -Tag - Sie verwenden 'C' nicht' C++ ' – UnholySheep

Antwort

2

Ihre Funktion verwendet wahrscheinlich zu viel Stack-Speicher, die durch diese Leitungen verursacht:

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

Lösung: Ordnen Sie den Speicher aus dem Heap:

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

Lokale Variablen, einschließlich Arrays, sind auf dem Stapel gespeichert. Die Standard-Stack-Größe unter Linux beträgt 8 MB. Nur eine einzige Ihrer Arrays ist allein 8 Millionen Bytes, 1000 * 1000 * 8 (sizeof(double) ist 8). Sie haben drei dieser Arrays.

Entweder diese Arrays global machen oder dynamisch zuweisen.

Verwandte Themen