Warum crasht mein Countdown
-
Ich wollte einen lustigen Countdown bauen, aber er crasht nach einer Weile.
#include <iostream> #include <ctime> class Countdown { public: Countdown(int s) { t = time(0)+s; this->s=s; delete this; } operator bool() const { //std::cout <<s<< " \r"; return s!=t-time(0) ? --s:s-s; } ~Countdown() { if(*this) std::cout <<s<< " \r"; switch(t-time(0)) { default: new Countdown(s); case 0: break; } } private: time_t t; mutable int s; }; int main() { new Countdown(10); }Ich habe keinen Debugger zur Hand und kann jetzt nicht schauen. Wenn ich Zeile 16 einkommentiere läuft er länger. Könnte ja irgendwie ein Stacküberlauf sein, aber wo? Ich verwende doch new.

-
wtf?
sorry, musste sein. außerdem bin ich betrunken.
dieser code ist einfach ... WTF?!?!?!!
-
besoffski schrieb:
außerdem bin ich betrunken.

-
Interessanter Countdown...

Spontan könnte es einen Stacküberlauf geben, da du im Konstruktor den Destruktor aufrufst und im Destruktor wieder den Konstruktor. Ich schau mir das gleich noch mal in einem Debugger an.

-
Jap, im Konstruktor wird der Destruktor aufgerufen und umgekehrt. Solange bis der Stack irgendwann mal voll ist. :xmas1:
LInterface.exe!Countdown::~Countdown() Line 45 C++ LInterface.exe!Countdown::`scalar deleting destructor'(unsigned int) C++ LInterface.exe!Countdown::Countdown(int s) Line 28 C++ LInterface.exe!Countdown::~Countdown() Line 45 C++ LInterface.exe!Countdown::`scalar deleting destructor'(unsigned int) C++ LInterface.exe!Countdown::Countdown(int s) Line 28 C++ LInterface.exe!Countdown::~Countdown() Line 45 C++ LInterface.exe!Countdown::`scalar deleting destructor'(unsigned int) ...
-
#include <iostream> #include <ctime> class Countdown { public: Countdown(int s) { t = time(0)+s; this->s=s; delete this; } Countdown(Countdown const& o) { s=o.s; t=o.t; delete this; } operator bool() const { return s!=t-time(0) ? --s+1:s-s; } ~Countdown() { if(*this) std::cout <<s<< " \r"; switch(*this) { while(s) { if(s==t-time(0)) continue; default: if (s!=t-time(0)&&s) new Countdown(*this); continue; case 1: return; } } } private: time_t t; mutable int s; }; int main() { new Countdown(11); }Crasht nicht mehr, aber irgendwas hat mit der Abbruchbedingung nicht hin.
-
Beeilt euch Leute! Muss in 20 Minuten fertig sein.
-
-
-
Mit solchen Programmen geht die Welt echt noch unter.
-
@ sülfester
da hast du wohl was falsch gemacht