Zeigerprobleme



  • Aloha,

    ich hätte eine sehr interessante Frage bezüglich Zeigern.
    Bis jetzt ist mit der Fehler Double Free bei der Anwendung von Zeigern bekannt, daher komme ich auf die Frage, ob es noch irgendwelche Probleme bei der Verwendung von Zeigern entstehen könnten?
    Wie könnte man da Abhilfe schaffen? Danke an allen Mitbeteiligten!

    mfg,
    Composer



  • Wenn Double Free das ist, was ich vermute, was du meinst, dann gibts mindestens

    Double Free
    No Free
    No Malloc
    Overwrite
    Overrun
    Chaos
    Exceptions Unsafety
    und natürlich
    Too Less Memory.

    Will damit sagen, es hat vermutlich wenig Wert, die Fehler zu klassifizieren.



  • hallo volkard,

    schön dich hier zu sehen 🙂
    habe zwar im internet fleißig danach gesucht, aber wusste nicht, dass es so viele fehler bei der benutzung von zeigern vorkommen.
    mit double free meinte ich, wo man den selben speicherbereich mehrmals freizugeben versucht.

    mich würde auch noch interessieren, welche operationen man mit den zeigern machen kann.
    bis jetzt habe ich mich nur mit diesem tutorial beschäftigt: http://www.highscore.de/cpp/einfuehrung/zeiger.html
    leider steht es nicht sehr viel über die zeigeroperationen.

    edit:
    habe kurz gegoogelt. viel habe ich über die meldungen nicht gefunden.
    wie suche ich da am besten? mich würde schon sehr interessieren, was die ganzen begriffe bedeuten. 😉

    mfg,
    composer



  • Composer schrieb:

    habe zwar im internet fleißig danach gesucht, aber wusste nicht, dass es so viele fehler bei der benutzung von zeigern vorkommen.

    Die kommen ja auch in der täglichen Programmierpraxis gar nicht vor. Wenn DU fragst, welche Fehler man mit int machen kann, bekommst Du doppelt so viele ebenfalls frei erfundene Namen.

    mit double free meinte ich, wo man den selben speicherbereich mehrmals freizugeben versucht.

    Ok, dann habe ich richtig geraten.

    mich würde auch noch interessieren, welche operationen man mit den zeigern machen kann.

    Ich zähle mal die Operatoren auf, die mir so einfallen, die (evtl mittelbar) mit Zweigern gehen:

    Zeigerzugriffssachen:
    Auswerten mit *, Elementzugriff mit ->, Adresse holen mit &, []

    Zeigerarithmetik über [] hinaus:
    +, +=, ++, -, -=, --, <, <= ==, !=, >=, >

    Sonstiges:
    !, ?:, &&, ||, >>, <<, ,, sizeof, new, delete, die casts

    Auch hier muß ich sagen, daß die Frage nicht sinnvoll ist. Solche Auflistungen bringen gar nichts.





  • Informier dich doch auch im Forum-Artikel über Zeiger.



  • Composer schrieb:

    ..., ob es noch irgendwelche Probleme bei der Verwendung von Zeigern entstehen könnten? ...

    ojah! es gibt noch nen Multiple Alloc Error!
    Bsp:

    char* a = malloc(110);
    b = malloc(22);
    

    hierbei entsteht das Memory Hole Problem, also ein Loch im Speicher, weil der speicherplatz nicht mehr zugänglich ist aufgrund überschriebener adresse durch den zweiten malloc aufruf.



  • Sollte wohl

    a = malloc(22);
    

    heissen.



  • err0r schrieb:

    Multiple Alloc Error!
    Memory Hole Problem

    Vielleicht eher bekannt als Memory Leak. 😉

    Es gibt wirklich recht viele Fehlerquellen bei manueller Speicherverwaltung. Ein Grossteil davon sind ungültige Zeiger, z.B. durch vergessene Initialisierung oder Null-Setzung nach dem Löschen des Objekts dahinter. Dann gibt es Array-Überläufe, delete s auf ungültige Speicherbereiche, Verwechslungen von delete und delete[] , Memory Leaks, und so weiter...

    Wichtig ist nur, dass der allergrösste Teil stark eingeschränkt werden kann, wenn man High-Level-Konstrukte wie z.B. Container verwendet und das Hantieren mit rohen Zeigern auf wenige Stellen beschränkt.


Anmelden zum Antworten