Hi! Thomas Hertweck wrote:
Martin Oehler wrote:
Wann? Ich schreibe grade einen kleinen Raytracer, der auf einem Rechner gleicher Hardware +/- RAM fehlerfrei läuft. Das ganze unter C++. Wer sowas noch nicht gemacht hat: mehr oder weniger sind das zwei for-schleifen, in denen Berechnungen ausgeführt werden. Das ganze läuft 400x300 mal, also 120000 Ausführungen der inneren Schleife.
Ahhh, da schlaegt mein Geophysiker-Herz hoeher.... :-) RayTracer brauchen wir hier auch ziemlich oft, wenn auch vielleicht nicht genau die gleichen wie Du sie einsetzt.
Hehe, wenn Du wüßtest...
Der Fehler tritt auch nicht immer an der gleichen Stelle des Programms auf, sondern nach einer gewissen Anzahl von Schleifendurchläufen, den Speicher habe ich inzwischen auch statisch zugeteilt, STL wird auch nicht mehr benutzt. Ach ja, zu Tode swappen kann man auch ausschließen, der swap bleibt schön leer.
Du arbeitest nicht zufaellig mit Pointern oder aehnlichem?
Inzwischen nicht mehr, der Schnittpunkttest wird sauber ausgeführt, die Intensitäten sauber berechnet. Abschnittsweise läuft das alles in Ordnung durch, halt aber nicht insgesamt.
Damit kann man boese Dinge anstellen.... Du allokierst nicht zufaellig zu viel Speicher irgendwo? Dir laeuft nicht zufaellig eine Schleifenvariable aus dem Ruder?
Die letzte Meldung meines "cout-debugging" ist die Ausgabe der Durchlauf-Variablen (jaja, alles mit endl hintendran), eine erste Meldung aus der Funktion kriege ich nicht mehr (cout << "foo" << endl; bevor irgendwas berechnet wird).
Mit C++ kann man auch ganz nett auf Feldelemente zugreifen, die gar nicht wirklich existieren (Fortran faengt so etwas IIRC ab, bei C++ ist dafuer der Programmierer selbst verantwort- lich). Wir entwickeln hier ein Migrationsprogramm in C++, da gab es auch zu Beginn merkwuerdige Abstuerze.... Hast Du das Programm schon mal "debuggt"? Auf Linux ist da ddd sehr zu empfehlen, ein Frontend fuer gdb.
Siehe meine andere mail, ddd hilft nix, bevor ich was sehe, wird's dunkel.
Prinzipiell koennte es schon etwas mit der Kernel-Version zu tun haben, evtl. bist Du da auf einen Bug gestossen.....
Was nun? Neuen Kernel? Wenn ja, welchen? (SuSE bietet als update den 2.4.7 an, oder soll ich einen von Kernel.org nehmen) CU und danke Martin