Zahlen werden auf Konsole nicht korrekt dargestellt

Alles rund um die Programmierung mit Qt
Antworten
pinki
Beiträge: 10
Registriert: 19. August 2009 14:54

Zahlen werden auf Konsole nicht korrekt dargestellt

Beitrag von pinki »

N'Abend!
Wenn ich eine Zahl aus einem int auf der Konsole ausgeben möchte (egal, ob std::cout oder qDebug()), dann wird immer nur ein zweizeiliger Kasten mit z.B. 0003 ausgegeben. Wenn die Zahl direkt eingegeben wird und nicht aus einer Variable stammt, wird sie korrekt ausgegeben.

Was mache ich falsch?


Gruß
Michael
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Das klingt als würd ich dirs nicht glauben. Mach mal ein Beispiel mit Quelltext.
pinki
Beiträge: 10
Registriert: 19. August 2009 14:54

Beitrag von pinki »

Hmmm...
Irgendwie scheint das ein Nebeneffekt meiner Loggerklasse zu sein, an der ich gerade bastel. Ich finde den Fehler aber leider nicht. :(

Was auch seltsam ist: Mit GUI kann ich den Logger benutzen, ohne nicht. o_O


Seht ihr mehr?

Quelltext ist im Anhang.


Gruß
pinki
Dateianhänge
testApplikation.tar.gz
Logger mit Beispiel
(2.37 KiB) 131-mal heruntergeladen
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Warum müssen immer alle C++ wie Java programmieren...
Man kommt sehr gut ohne Zeiger und new aus. Ich hab jetzt nur das geändert, und schon krieg ich keine SegFaults mehr...

Code: Alles auswählen

class Logger : public QObject{
    private:
        static Logger *instance;
        int           debugLevel;
        QFile         logFile;
        QDateTime     zeit;
        QDate         lastLog;

        Logger(int = 0);

    public:
        static Logger* getInstance();
        void log(QString, int);
        char getDebugLevel();
        void setDebugLevel(int);
};

Code: Alles auswählen

Logger::Logger(int debugLvl) 
 : debugLevel(debugLvl),
   logFile("log/" + QDate::currentDate().toString("dd-MM-yyyy") + ".log"),
   lastLog(QDate::currentDate())
{
}
Mach mal so weiter, und schau obs besser wird. Ich kann mir vorstellen, dass du irgendwas böses mit deinem Speicher getrieben hast, ich geh dem aber nimmer nach, da die ganzen Zeiger eh raus müssen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Erm...

Code: Alles auswählen

Logger::Logger(int debugLvl = 0){
    this->debugLevel = debugLvl;
    this->zeit = new QDateTime();
    *this->lastLog = zeit->date().currentDate(); /// 111!!!11!!! BÖSE!
    this->logFile = new QFile("log/" + zeit->date().currentDate().toString("dd-MM-yyyy") + ".log");
}
Schau dir die Markierte Zeile an. lastLog ist UNINITIALISIERT! Du weist diesem unintialisierten Speicherbereich nun etwas zu. Das geht sowas von in die Hose! lastLog zeigt irgendwo hin. Wenn du dann dort einfach Speicher überschreibst mit deiner Zuweisung, kann alles passieren. Undefiniertes Verhalten. Sogar dein Rechner kann implodieren :P

Darum: Lass die Zeiger bleiben, wenn du sie nicht wirklich brauchst!
pinki
Beiträge: 10
Registriert: 19. August 2009 14:54

Beitrag von pinki »

Moin moin!
Danke für die schnellen Antworten.
franzf hat geschrieben:Warum müssen immer alle C++ wie Java programmieren...
Das kommt davon, wenn man vorher nur C++ gemacht hat und nun im Studium nur Java.
Die Umstellung geht bei mir da noch nicht so leicht von der Hand. ^^


Ich habe das jetzt - mit Ausnahme von instance - wie vorgeschlagen zeigerlos gemacht.
Den Konstruktor habe ich auch übernommen. Danke noch mal. :)

Die uninitialisierte Stelle war mir gar nicht aufgefallen. *mir vor den Kopf klatsch*

Die SegFaults sind jetzt weg, das Problem mit der Konsole habe ich aber leider immer noch. :(

Hab viel rumprobiert und letztenendes sogar Qt noch mal in der neusten Version heruntergeladen und kompiliert. Gebracht hat auch das nichts.

Im Anhang ist nun die überarbeitete Version.


Gruß
Michael


Edit: Och nöööö! Wie dumm! Die arg-Methode von QString sollte ich vielleicht auch beachten. Ihr dürft mich nun steinigen. ^^
Dateianhänge
testApplikation2.tar.gz
überarbeitete Loggerversion
(2.36 KiB) 155-mal heruntergeladen
Antworten