PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : feld überscheibt anderes feld (C++)



buchwaldj
17-12-2009, 17:47
hi,
ich bin gerade auf ein ganz seltsames phänomen gestoßen: ein feld wird durch ein anderes überschrieben:


double f[nx+1][nt+1];
for(int m=0;m<=nt;m++){
if(m<=2){ //sourcetimefunction heaviside
f[j_s][m]=300;
std::cout << f[j_s][m] << "\n";
}else{
f[j_s][m]=0;
}
}
double v[nx+1][nt+1];
for(int j=0;j<=nx+1; j++){
for(int m=0;m<=nt+1; m++){
v[j][m]=0;
std::cout << f[j_s][0] << " " << f[j_s][1] << " " << f[j_s][2]<< "\n";
}
}

führt dazu das sobald v[j_s][0] null gesetzt wird auch f[j_s][0] null gesetzt wird.
wie kann das sein???

locus vivendi
17-12-2009, 21:39
In den verschachtelten For-Schleifen wird das Array außerhalb seiner Grenzen indiziert. Der Vergleich mit <= im Schleifenkopf ist unüblich und hat hier vielleicht zu einem Denkfehler geführt.

buchwaldj
17-12-2009, 23:53
thx, ja ein dummer denkfehler. aber sonst kam an solchen stellen immer ein seg fault.
da hat mich das verhalten vom eigentlichen fehler abgelenkt...

quinte17
21-12-2009, 15:18
ein segfault entsteht nur wenn dein programm außerhalb seines zuständigkeitsbereichs versucht zu schreiben. da du innerhalb des speicherbereichs geblieben bist, konnte kein segfault entstehen.