g++: Status_access_violation :-(

davidhigh

Grünschnabel
Hallo allerseits,
ich hab ein kleines Problem in g++ für windows.

Das Programm wird noch korrekt compiliert, liefert dann aber beim Ausführen die Fehlermeldung:
... STATUS_ACCESS_VIOLATION ... 1377 handle_exceptions: Dumping stack trace to ...

Was bedeutet das ? Ich dachte, das könnte an nem Speicherzugriffsfehler liegen.
Wenn ich die Feldgrößen verändere, verändert sich nämlich auch die vierstellige Zahl.

Ich meine auch fast, dass es an folgender Anweisung liegt, denn wenn ich diese und die dazugehörige Funktion auskommentiere, läufts gut:

Code:
complex<double> ***Psi = new complex<double>**;
for (ib=0;ib<Nb;ib++) Psi[ib]= new complex<double>*;

for (ib=0;ib<Nb;ib++)
for (ix=0;ix<=Nx;ix++) Psi[ib][ix]=new complex<double>[Nt+1];

Vielleicht noch die dazugehörige Belegungsfunktion:
Code:
void Basisfkten(double *x,double a, double b, int Nx,complex<double> ***Psi,int Nb)
{int ix,ib;
for (ib=0;ib<Nb;ib++)  
    Psi[ib][0][0]=0;Psi[ib][Nx][0]=0;
    for (ix=1;ix<Nx;ix++)
       {Psi[ib][ix][0]=Basisfkt(x[ix],a,b,ib+1);}
}
wobei Basisfkt(...) korrekt läuft.

Danke im Voraus,
Gruß, David
 
Zuletzt bearbeitet:
Hi.
Code:
complex<double> ***Psi = new complex<double>**;
for (ib=0;ib<Nb;ib++) Psi[ib]= new complex<double>*;

for (ib=0;ib<Nb;ib++)
for (ix=0;ix<=Nx;ix++) Psi[ib][ix]=new complex<double>[Nt+1];
Du erzeugst dort jeweils Speicher für einen Zeiger, sprichst den Zeiger danach aber als Array an?! :confused:
C++:
complex<double> ***Psi = new complex<double>**[Nb]; // usw. ...
Gruß
 
Erstmal danke für die Antwort.
ich hab die Zeilen jetzt mal wie folgt geändert:
Code:
complex<double> ***Psi = new complex<double>**[Nb];
for (ib=0;ib<Nb;ib++) Psi[ib]= new complex<double>*[Nx+1];
for (ib=0;ib<Nb;ib++)
for (ix=0;ix<=Nx;ix++) Psi[ib][ix]=new complex<double>[Nt+1];

der Fehler tritt aber nach wie vor auf ?
 
Ich dachte eigtl. das erzeugt ein 3-dim. Feld der Größe Nb x Nx+1 x Nt+1
Die Anweisung funktioniert auch. Das Problem scheint demnach an der darauf folgeneden Funktion zu liegen:
Code:
void Basisfkten(double *x,double a, double b, int Nx,complex<double> ***Psi,int Nb)
{int ix,ib;
for (ib=0;ib<Nb;ib++) 
    Psi[ib][0][0]=0;
    Psi[ib][Nx+1][0]=0;
    for (ix=1;ix<Nx;ix++)
       {Psi[ib][ix][0]=sqrt(2/(b-a))*sin((ib+1)*M_PI/(b-a)*(x-a)); }
}

Kannst du da auf die Schnelle einen Fehler entdecken?
Danke und Gruß, David
 
Die Anweisung funktioniert auch. Das Problem scheint demnach an der darauf folgeneden Funktion zu liegen:
Code:
void Basisfkten(double *x,double a, double b, int Nx,complex<double> ***Psi,int Nb)
{int ix,ib;
for (ib=0;ib<Nb;ib++) 
    Psi[ib][0][0]=0;
    Psi[ib][Nx+1][0]=0;
Psi[ib][ .. ] ist ein Array von Nx + 1 Elementen, von 0 bis Nx - das Element (Nx + 1) gibt es nicht.

Gruß
 
Zurück