Umstellung auf VC.net2003



  • Confuse schrieb:

    Klar gebe ich den Speicher wieder frei, im Destrktor der KLasse.

    Ist trotzdem nicht schön, was du da machst. Wenn du den Speicher erst im dtor freigibst, dann darfst du KopfAuswerten pro Instanz maximal einmal aufrufen. Ansonsten überschreibst du gültige Zeiger, die danach verloren sind.
    Zudem solltest du mal prüfen, ob das ViewCfg.Bez Array auch gross genug ist.



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum WinAPI in das Forum MFC mit dem Visual C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • für den Hinweis. Aber es wird eh nur einmal aufgerufen.

    Aber warum nur, gibt new mir keinen gültigen Zeiger zurück?
    Muss ich villeicht noch was an den Einstellungen von VC2003 ändern? Mit VC6.0 ging es ja!

    Und warum wird mein Thema in MFC verschoben? Hat nichts dabmit zu tun.

    Danke für Hinweise.

    Gruß 😕



  • COnfused schrieb:

    Aber warum nur, gibt new mir keinen gültigen Zeiger zurück?

    Kann ich mir nicht so richtig vorstellen. Woran siehst du das denn?
    new gibt entweder einen gültigen Zeiger zurück oder es wird eine std::bad_alloc exception geworfen, falls new fehlschlägt.
    Vielleicht sind ja 50 Zeichen auch einfach zu wenig, weil die eingelesene Sequenz länger ist.

    COnfused schrieb:

    Und warum wird mein Thema in MFC verschoben?

    Versteh ich auch nicht ganz. 🙂



  • ich gehe die Funktion mit dem Debugger durch. Ausserdem bekomme ich damit ja eine Exception. Und wie gesagt: mit VC6.0 compiliert es ohne jeden Fehler, und das Programm läuft. Das ist ja das, was ich nicht verstehe.😕 Gruß 😕



  • confused schrieb:

    ich gehe die Funktion mit dem Debugger durch. Ausserdem bekomme ich damit ja eine Exception.

    Eben, deshalb kannst du ja auch keinen Nullzeiger haben. Sobald die Exception geworfen wird, wird zum nächsten catch Block gesprungen. Wobei auch catch Blöcke höherer Ebenen relevant sind. Ist keiner vorhanden, wird das Programm beendet. Dh, es wird weder der Rückgabewert von new ausgewertet, noch die nachfolgenden Anweisungen verarbeitet.

    confused schrieb:

    Und wie gesagt: mit VC6.0 compiliert es ohne jeden Fehler, und das Programm läuft.

    Darauf würde ich nicht viel geben. Der Compiler von VC6 ist nunmal relativ alt und lässt teilweise einige schlimme Sachen zu.



  • ich bekomme ja erst mal ne first-chance Exeption, erst beim Schreibzugriff auf den Nullzeiger wirfs mich raus.
    In VC6.0 (hab es extra wieder installiert auf einer 2. Partition) gibt mir new an der gleichen Stelle einen gültigen Zeiger zurück. Es gibt dort nichts "Schlimmes"!

    Gruß 😕



  • confused schrieb:

    ich bekomme ja erst mal ne first-chance Exeption, erst beim Schreibzugriff auf den Nullzeiger wirfs mich raus.

    Irgendwie versteh ich dich nicht. Nochmal, du kannst keinen Nullzeiger haben, das geht nur unter Verwendung von nothrow. Wenn du einen Nullzeiger hast, dann musst du dir den selbst aus den Fingern gesogen haben. Wie verarbeitest du denn die Exception?

    confused schrieb:

    In VC6.0 (hab es extra wieder installiert auf einer 2. Partition) gibt mir new an der gleichen Stelle einen gültigen Zeiger zurück. Es gibt dort nichts "Schlimmes"!

    Wenn es mit VC6 funktioniert und mit VC.NET 2003 nicht, dann vermutlich doch. Wobei ich das jetzt nicht auf den konkreten Fall bezogen hattte.
    Es kann durchaus sein, dass du vorher irgendwelche Sachen machst, die sich erst an entsprechender Stelle auswirken.

    Hast du denn schon kontrolliert, ob ViewCfg.Bez gross genug ist?



  • Hast du denn schon kontrolliert, ob ViewCfg.Bez gross genug ist?

    Ja, ist es. 50 Byte groß, 12 gehn max rein.

    Ich habe jetzt ein neues Projekt angelegt und mal nicht "leeres Projekt" angeklickt, die Dateien rausgeschmissem, meine rein,Vorkompilierte Header raus, und es geht!!! in VC2003!!!. Was ist denn das? Ich hab das doch immer so gemacht, leeres Projekt, Dateien rein, Libs gelinkt, und es lief. Was ist denn da jetzt bei VC2003 anders? Was muss ich noch umstellen?

    Oder ist es ein Fehler in meinem Code, der jetzt irgendwie überspielt wird?
    😕
    Aber Danke schonmal für die biserigen Hilfen. 👍

    Gruß 😕



  • confused schrieb:

    Hast du denn schon kontrolliert, ob ViewCfg.Bez gross genug ist?

    Ja, ist es. 50 Byte groß, 12 gehn max rein.

    Und du speicherst hoffentlich auch nur maximal 12 Zeiger rein.

    confused schrieb:

    Ich habe jetzt ein neues Projekt angelegt und mal nicht "leeres Projekt" angeklickt, die Dateien rausgeschmissem, meine rein,Vorkompilierte Header raus, und es geht!!! in VC2003!!!. Was ist denn das?

    Nun, ich hatte eigentlich noch nie Probleme bei der Projekt Umstellung. Könnte evtl. an den vorcompilierten Headern liegen, da ich generell keine benutze. Naja, wenigstens funktioniert es jetzt.


Anmelden zum Antworten