Verwirrender Speicherzugriffsfehler beim erhöhen von Integern



  • Mumbor schrieb:

    (so frißt z.B. die SDL auch nur char* 😉

    std::string::c_str() hilft da...



  • ...oder modernere APIs wie SFML :p

    Mumbor, musst du natürlich selber wissen. Mir ist auch klar, dass Refactoren existierender Projekte nicht immer eine Option ist. Ich würde mir aber wenigstens für neue Projekte vornehmen, gewisse Richtlinien zu beachten. Die Meinung, dass du dadurch mehr Zeit brauchst, ist Irrglaube. Das Gegenteil ist der Fall: Du musst dir nicht dauernd Gedanken um Speicherverwaltung machen, wenn du RAII benutzt. Du bist schneller in der Entwicklung, Code wird kürzer und besser verständlich, und ist sicherer, ohne dabei an Geschwindigkeit einzubüssen. Du hast nur Vorteile.


  • Mod

    Nexus schrieb:

    Die Meinung, dass du dadurch mehr Zeit brauchst, ist Irrglaube. Das Gegenteil ist der Fall: Du musst dir nicht dauernd Gedanken um Speicherverwaltung machen, wenn du RAII benutzt. Du bist schneller in der Entwicklung, Code wird kürzer und besser verständlich, und ist sicherer, ohne dabei an Geschwindigkeit einzubüssen. Du hast nur Vorteile.

    Nicht zu vergessen: Verwirrende Speicherzugriffsfehler beim Erhöhen von Integern sind ebenfalls so gut wie ausgestorben. Oder falls man doch mal einen hat, dann sind sie sehr viel einfacher zu finden.



  • Warum gibts eigentlich keinen pointer_wrapper?
    Der einem einen Assert um die Ohren haut, wenn man vergessen hat, dem nullptr einen Wert zu geben. 🙄


  • Mod

    Nathan schrieb:

    Warum gibts eigentlich keinen pointer_wrapper?
    Der einem einen Assert um die Ohren haut, wenn man vergessen hat, dem nullptr einen Wert zu geben. 🙄

    😕 Meinst du Referenzen?



  • Nein,ich will einfach nur sicherer variable, ggf ungültige Verweise auf ein Objekt.


  • Mod

    Einen Laufzeitfehler a la assert bekommst du doch, wenn du einen falschen Pointer benutzt. Ich verstehe deinen Featurewunsch nicht.



  • OK, nochmal besser erklärt.
    Ich brauche ab und zu, einen änderbaren und ggf. ungültigen Verweis auf ein anderes Objekt. Dafür muss ich einen (rohen) Pointer nutzen.
    Ich hatte mich ewig mit Speicherzugriffsfehlern herum schlagen müssen, weil ich den Pointer vergessen hatte zu initialisieren. Deswegen habe ich mir eine Wrapper-Klasse um einen rohen Pointer geschrieben, der ihn ordnungsgemäß initalisiert und vorm Dereferenzieren via assert() prüft, ob der Pointer einen Wert hat. Wäre schön, wenn es sowas im Standard gäbe.



  • vorm Dereferenzieren via assert() prüft, ob der Pointer einen Wert hat.

    Zeiger koennen Werte besitzen, hne dass sie dereferenzierbar sind. Auch gibt es Smart-Pointer, die deinen Wuenschen entsprechen.



  • Das einzige, was dafür in Frage kommen würde, wäre std::weak_ptr<>. Alle anderen Pointer löschen die Objekte im Destruktor. Und wenn ich lock() mache um darauf zuzugreifen, wird ein shared_ptr<> erzeugt, was auch überflüssig ist. Ich will einfach nur einen simplen Verweis auf ein Objekt auf dem Stack.


Anmelden zum Antworten