Segmenation Fault im Beispielprogramm
-
Ich benutze heir zwar C aber in einem C++ Programm. Ich habe folgenden Code aus einem Tutorial im Netz kopiert:
struct tm *ptr; time_t lt; lt = time(NULL); ptr = localtime(<); <-- Seg Fault hier printf(asctime(ptr));Allerdings erhalte ich beim Ausführen einen Segmatation fault. Ist das Beispielprogramm also falsch? Oder kann ich das in C++ nicht so verwenden?
-
Das Beispiel sollte so funktionieren, C oder C++ macht hier keinen Unterschied.
-
Die printf-Zeile ist nicht korrekt, aber davor hat eigentlich alles seine Richtigkeit. Bleiben eigentlich nur drei Möglichkeiten:
a) NULL ist bei dir nicht 0
b) time schlägt fehl und liefert stattdessen den Fehlerwert von -1.
c) Du enthälst uns noch irgendwas wichtiges vor
-
Vorher mache ich noch folgendes:
fileOutput << time(0) << "\t"; for( int i = 0; i < Constants::numberOfPoissonAttributes+1; ++i ) fileOutput << probs[i] << "\t"; fileOutput << endl; struct tm *ptr; time_t lt; lt = time(NULL); ptr = localtime(<); printf(asctime(ptr));Und wenn ich dann in die Datei reinschaue, dann stehen da in der ersten Spalte auch korrekterweise die Sekunden. Nur im unteren Teil kommt der Fehler.
Ansonsten habe ich das hier noch programmiert, was auch einen Segmentationfault liefert:
cout << "time = " << time(0) << endl; stringstream s; s << time(0); cout << s.str();Dabei wir "cout << "time = " << time(0) << endl;" richtig auf der Konsole ausgegeben und in "s << time(0);" kommt wieder ein Segfault.
-
SeppJ schrieb:
Die printf-Zeile ist nicht korrekt, aber davor hat eigentlich alles seine Richtigkeit. Bleiben eigentlich nur drei Möglichkeiten:
a) NULL ist bei dir nicht 0
b) time schlägt fehl und liefert stattdessen den Fehlerwert von -1.
c) Du enthälst uns noch irgendwas wichtiges vorGibt es wirklich Compiler bzw. Systeme, die NULL != 0 besitzen?
Klar, dass so etwas theoretisch vorkommen kann, da der Standard nichts vorschreibt.
-
CSpille schrieb:
Gibt es wirklich Compiler bzw. Systeme, die NULL != 0 besitzen?
Klar, dass so etwas theoretisch vorkommen kann, da der Standard nichts vorschreibt.Würde mich sehr schwer wundern, aber laut Standard gibt time nur dann etwas anderes als ein gültiges time_t Objekt zurück, wenn das Argument ungleich 0 ist (hier unwahrscheinlich) oder die Zeit nicht festgestellt werden kann (ebenfalls unwahrscheinlich).
Ich vermute mal, dass uns HändyÄndy nicht alles sagt. Sein erstes Beispiel ist jedenfalls nicht compilierbar, daher nehme ich an, dass das Programm noch mehr macht als man hier sieht. Oder seine Systemuhr ist kaputt
. Ich würde mal einen Debugger empfehlen und mir die Werte der Variablen vor dem Segfault angucken.