Umstellung auf VC.net2003



  • Matrix2000 schrieb:

    probier mal NULL klein zu schreiben.
    null statt NULL

    Das wird nur relativ wenig helfen.

    @confused
    Kann es sein, dass dein Speicher irgendwann ausgeht? Kann ich mir zwar nicht richtig vorstellen, da immer nur 50 Zeichen reserviert werden. Dass du mit new[] Speicher reservierst, diesen aber mit delete[] nicht freigibst, ist trotzdem nicht korrekt.

    btw:
    Auch wenn du das vielleicht beabsichtigt hast, aber dein Code hat wenig mit Unicode Portabilität zu tun. Mit WinAPI realisiert man sowas anders.



  • Klar gebe ich den Speicher wieder frei, im Destrktor der KLasse. (pbTemp ist eh überflüssig).
    Unicode: hast schon recht ist nicht so toll. Ging aber. War ganz früher mal reines C, dann kamen ein paar KLassen, UNICODE, etc jetzt ist alles durcheinander. Das Programm wollte ich ja jetzt mal auf vordermann bringen, aber ich bekomme ja nicht mal den alten code zum laufen, mit der neuen IDE.

    null statt NULL

    ???

    Und ich meinte natürlich VC++2003 nicht 2004!

    Aber für mein Problem hab ich immer noch keine Erklärung.



  • 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