Frage

Lieber g ++ Hacker, ich habe die folgende Frage.

Wenn einige Daten eines Objekt durch ein fehlerhaftes Programm überschrieben wird, warum wird das Programm schließlich mit einem doppelten freien Fehler auf Zerstörung des Objekts scheitern? Woher weiß er, wenn die Daten beschädigt ist oder nicht? Und warum es verursacht doppelte frei?

War es hilfreich?

Lösung

Es ist in der Regel nicht, dass der Speicher des Objekts überschrieben, sondern ein Teil des Speichers außerhalb des Objekts. Wenn diese Steuerung malloc Strukturen trifft, wird ausflippen frei, sobald es ihnen greift und versucht, seltsame Dinge auf der Grundlage der beschädigten Struktur zu tun.

Wenn Sie es wirklich nur Objektspeicher mit dummen Sachen überschrieben werden sollen, gibt es keine Möglichkeit malloc / free kennen würde. Ihr Programm abstürzen, aber aus anderen Gründen.

Hier finden Sie aktuelle valgrind . Es ist ein Werkzeug, das die CPU und Uhren jeden Speicherzugriff für Anomalien emuliert (wie der Versuch, malloc die Kontrollstrukturen zu überschreiben). Es ist wirklich einfach zu bedienen, die meiste Zeit starten Sie gerade Ihr Programm innerhalb valgrind von valgrind auf der Schale vorangestellt, und es spart Ihnen eine Menge Schmerz.

In Bezug auf C ++: immer stellen Sie sicher, dass Sie in Verbindung neuer Verwendung mit Lösch- und jeweils neue [] in Verbindung mit delete []. Nie mischen sie. Schlechte Dinge passieren werden, oft ähnlich das, was Sie beschreiben, (aber valgrind warnen Sie).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top