Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: MFC (Visual C++) ::  Heap Corruption Detected     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
laupert
Unregistrierter




Beitrag laupert Unregistrierter 10:02:41 10.02.2010   Titel:   Heap Corruption Detected            Zitieren

Hallo

Erhalte bei meinem Programm einen Debug Error, der da heißt:

Zitat:
Debug Error!

Programm: ...

HEAP CORRUPTION DETECTED: after Normal block(#4610492) at 0x2C07AF80.
CRT detected that the application wrote memory after end of heap buffer.


Der Fehler tritt auf wenn ich einen delete aufrufe. Genauer gesagt wird beim Singleton Template das einzige objekt gelöscht. Worauf deutet das hin wie kann ich den Fehler finden?
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9592
Beitrag _matze Mitglied 10:06:03 10.02.2010   Titel:              Zitieren

Du hast irgendwo Speicher dynamisch alloziert (Heap) und dann über den gültigen Bereich hinausgeschrieben. Der Fehler ist also nicht in der Zeile mit dem delete zu finden (dort wird er nur erkannt), sondern irgendwo vorher. Alles, was mit malloc/new alloziert wurde, ist verdächtig.

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 10:13:24 10.02.2010   Titel:              Zitieren

Evtl. versuchst Du mehrfach den gleichen Speicher freizugeben.
http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/
http://blog.m-ri.de/index.php/2008/10/31/vs-tipps-tricks-heap-bugs-finden-teil-2/
http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/
http://blog.m-ri.de/index.php/2008/11/27/vs-tipps-tricks-heap-bugs-finden-teil-4/

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 12:28:33 10.02.2010   Titel:              Zitieren

Danke euch.

Ich habe mir mal die Artikel durchgelesen. Bin aber nicht weitergekommen:

Beitrag 1: Habe die Codezeilen bei mir plaziert. Allerdings ändert sich nichts. Bleibe erst wieder am delete hängen.

Beitrag 2: Den Application Verifier habe ich installiert. Nun habe ich versucht diesen über VS 2008 zu starten. Geht nicht. Beim Shortcut (Umschalt+Alt+F5) tut sich nichts. Habe den Application Verifier so gestartet. Nun kann ich meine .exe hinzufügen. Aber die besagten Einstellungen finde ich nirgends. Beim Start meiner Applikation tut sich auch nichts!
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 13:31:53 10.02.2010   Titel:              Zitieren

laupert schrieb:
Beitrag 1: Habe die Codezeilen bei mir plaziert. Allerdings ändert sich nichts. Bleibe erst wieder am delete hängen.


Dann ist der Zeiger selbst, den Du da hast ungültig und verweist nicht auf den Speicher der allokiert wurde...
Oder der Speicher wurde schon freigegeben (schreib ich ja schon)...

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 14:40:05 10.02.2010   Titel:              Zitieren

Und wie starte ich den Application Verifier richtig?
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 15:32:12 10.02.2010   Titel:              Zitieren

IMHO wird er nur bei der Professional bzw. Team-Suite integriert.

Es gibt doch einen eigenen Menüeintrag.

Zudem müsste sich Dein fehlereinfacher finden lassen... ;)

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
lauptert
Unregistrierter




Beitrag lauptert Unregistrierter 16:51:04 10.02.2010   Titel:              Zitieren

Hallo.

Ich habe VS 2008 Pro. Allerdings finde ich keinen Menüeintrag.

Habe den Fehler allerdings nun gefunden. Es lag an einer Membervariable, einem Array auf das ein Zeiger zurückgegeben wurde.

Trotzdem nochmals zu dem Application Verifier. Ist ein interessantes Tool. Habe hier aber weder die Einstellungen gefunden die du da beschrieben hast. Noch habe ich irgendwelche Ausgaben gefunden, als mein Code an einer Stelle eine Ausnahmefehler gebracht hat.
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 17:00:00 10.02.2010   Titel:              Zitieren

Hst Du ihn den instlliert.

Im Deinen Programm/Start-Menü muss doch ein Eintrag vorhanden sein, mit dem den den ppVerifier starten kannst...

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 17:03:21 10.02.2010   Titel:              Zitieren

Ja klar das habe ich. Du hast doch aber gemeint dass man dies auch direkt aus VS aufrufen kann. Und dort dann auch Einstellungen vornehmen.
laupert
Unregistrierter




Beitrag laupert Unregistrierter 09:12:24 11.02.2010   Titel:              Zitieren

Im Application Verifier 4.0 gibt es ein Menü. Darin befinden sich 2 Unterpunkte: Properties und Verifier Stop Options. Beide Menüpunkte sind aber deaktiviert. Egal ob ein Projekt geladen oder nicht. Auch nicht wenn der Debugger gestartet wurde. Was muss man den da machen?
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 10:02:34 11.02.2010   Titel:              Zitieren

Ich weiß nicht was Du da machst.
Wenn ich den Application Verifier 4.0 starte (außerhalb von VS) bekomme ich ein Programm wo ich bestimmte Anwednungen und deren Verifier Schalter definieren kann.
Zudem habe ich in meinem VS auch entsprechende Projekteinstellungen.
Allerdings benutze ich die VS-Team Suite.

Zudem gibt es doch eine Doku oder ;) Hast Du die gelesen?
Es gibt sogar eine FAQ dazu:
http://social.msdn.microsoft.com/Forums/en/vstsappverifier/thread/ed8d0e9e-785d-4bbc-8909-4ece3877d832

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 10:18:59 11.02.2010   Titel:              Zitieren

Gibt es das Menü Edit bei dir nicht?
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 10:36:34 11.02.2010   Titel:              Zitieren

Doch, aber ohne dass Du eine Aplikatin per File -> Add hinzufügst nützt das doch nichts.

Wie wäre es mal mit Doku lesen?

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
lauptert
Unregistrierter




Beitrag lauptert Unregistrierter 11:33:58 11.02.2010   Titel:              Zitieren

Hallo.

Wie wärs mit Beitrag lesen. Nein, also ich habe die Doku gelesen. Aber ich habe ja in meinem Beitrag geschrieben:

C/C++ Code:
Egal ob ein Projekt geladen oder nicht.
C/C++ Code:
Egal ob ein Projekt geladen oder nicht.
C/C++ Code:
Egal ob ein Projekt geladen oder nicht.

Also nochmal. Ich habe ein Projekt hinzugefügt mit Add und habe es auch im Debugger gestartet. Aber das Menü bleibt deaktiviert.
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 13:45:57 11.02.2010   Titel:              Zitieren

Im Applikation Verifier musst Du eine EXE hinzufügen. Kein Projekt!

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 14:20:42 11.02.2010   Titel:              Zitieren

Zitat:
Im Applikation Verifier musst Du eine EXE hinzufügen. Kein Projekt!

Ja. Ist ja ok. Habe ich ja was anderes geht ja auch gar nicht. Geht aber trotzdem nicht!
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13513
Beitrag Martin Richter Moderator 14:51:53 11.02.2010   Titel:              Zitieren

Also Ich habe link eine EXE und rechts im Fenster meine Optionen, die ich setzen möchte.

Wenn Du nun einen Leaf-Node markierst, dann kannst Du auch für diesen Case die "Verifier Stop Options" setzen.

_________________
Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
laupert
Unregistrierter




Beitrag laupert Unregistrierter 09:10:24 12.02.2010   Titel:              Zitieren

Hallo. Ok das hat nun geklappt. Danke. Doch ins Visual Studio habe ich das ganze noch nicht integriert gebracht.
C/C++ Forum :: MFC (Visual C++) ::  Heap Corruption Detected   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.