Programm stürtzt nach ca. 3 Minuten ab.



  • nein ich meinte das:

    char *copy_and_alloc_string(char *src)
    {
       char *ret;
    
       ret = new char[strlen(src)];       // Und HIER ist der Fehler, weil es strlen+1 heissen müsste, wegen der 0 am ende des strings!
    
       strcpy(ret, src);
    
       return ret;
    }
    


  • Warum benutzt Du nicht sprintf?

    sprintf(zeit, "%02d:%02d:%02d", st.wHour, st.wMinute, st.wSecond);
    

    😕

    Dann solltest Du gleich GetLocalTime() benutzen, dann kannste Dir das "+2" für die Stunden sparen...

    An sonsten fällt mir nur auf, das Du zwar mit new Speicher holst, ihn aber nicht wieder freizugeben scheinst...



  • Der Speicher wird später (nach dem zurückliefern von 'zeit') extern verarbeitet und deleted.

    PS: Es handelt sich hier um eine GUI Anwendung. Ausserdem nutze ich sehr ungern Standard-Funktionen die ich sehr leicht selber bsteln kann.



  • tolga schrieb:

    PS: Es handelt sich hier um eine GUI Anwendung.

    ...und?

    tolga schrieb:

    Ausserdem nutze ich sehr ungern Standard-Funktionen die ich sehr leicht selber bsteln kann.

    Oh. Ja, ich programmiere auch lieber 20 Zeilen selber anstatt eine standard-Funktion zu benutzen, die dann mit 1 einzigen Zeile auskommt...

    Trotzdem reservierst Du Platz für 8 Zeichen, willst aber 13 Zeichen drin unterbringen ("00 : 00 : 00" ist nicht gleich "00:00:00")...



  • ich ahbe es zum testen auch schon mit 255er bufefrn versucht. nach ca. 3 min schmierts ab. Und 12 passt in 255. ganz sicher. Ausserdem klappts auch komischerweise mit 8er buffer und trotzdem 12 zeichen. Kann ichmir auch cniht erklären.



  • Einfach mal als "Release" statt "Debug" compilieren, dann stürzt es auch mit einem 8-Zeichen-Buffer ab.

    Blackbird



  • Was sagt denn der Task-Manager bei deinem Programm zu verwendetem Speicher und Anzahl GDI-Objekte? Steigen die Werte immer weiter an -> Memory-Leak 😉



  • Im taskmanager habe ich als erstes geschaut gehabt. Da passiert nix. Nach einmal minimieren und wieder maimieren sinkt der speicher schon auf 460kb; dann steigt er in paar sekunden auf 1400kb und bleibt konstant.



  • Hast du auch im Taskmanager die GDI-Objekt Spalte hinzugefügt? Im Menü unter Ansicht.



  • Thx asdf. Du hast es in dir!
    Das ist es. ich ahbe einen Timer mit Interval=1000;
    und jede sekunde kommt ein GDI-Objekt dazu. Also ahbe ich sicher einen Fehler in der WNDPROC in die WM_TIMER kommt oder in einer funktionen die aufgerufen werden bei WM_TIMER.
    Werde der Sache nachgehn..



  • Dann scheinst du wohl bei jedem Aufruf neue GDI-Objekte zu erstellen, ohne diese nachher auch wieder freizugeben 😉


Anmelden zum Antworten