studio - segmentation fault c++




Segmentierungsfehler vor der Ausführung von main (2)

Ihre Funktion verwendet wahrscheinlich zu viel Stapelspeicher, verursacht durch diese Zeilen:

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

Lösung: Weisen Sie den Speicher dem Heap zu:

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

Ich übe c und segmentation Fehler vor der Hauptfunktion ausgeführt ("Hallo" druckt nicht und sogar gdb ist nicht die Fehlerzeile 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.

   #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;
    }

Lokale Variablen, einschließlich Arrays, werden auf dem Stack 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.

Machen Sie diese Arrays entweder global oder ordnen Sie sie dynamisch zu.





segmentation-fault