Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

01.02.2012, 00:43

Sollte nicht ein Zugriff außerhalb des Arrays einfach nur einen Zugriffsfehler geben? Ich meine jedenfalls, dass bei mir die Fehlermeldung immer anders ausgesehen hat. Obwohl es im folgenden Link auch als Fehler aufgelistet ist, nunja (Fehlermeldungen müssen ja nicht einheitlich sein):

http://www.efnetcpp.org/wiki/Heap_Corruption
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

01.02.2012, 00:59

Das hängt davon ab was genau du anstellst. Wenn du so weit drüberschreibst dass du in tatsächlich unallokierte Adressbereiche kommst, dann wirds auch wirklich in einer Access Violation enden.
Aber wenn du z.B. einfach nur in einem Array ein bisschen zu weit läufst, dann stehen die Chancen gut dass du noch auf einer allokierten Page bleibst und einfach alles was dort so rumliegt überschreibst. Das erste Opfer wird dabei sehr wahrscheinlich die Managementstruktur von deinem Heap sein. Normalerweise wird dein Heap im Debugbuild seine Integrität z.B. bei einem new oder delete checken, d.h. der Fehler (Heap corruption) fällt nicht sofort auf sondern z.B. erst beim nächsten delete. Dann wirds natürlich schwierig rauszufinden wo genau das eigentliche Problem liegt, da die Stelle an der der Fehler bemerkt wird absolut nichts mit dem tatsächlichen Fehler zu tun haben muss...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

01.02.2012, 08:56

Gibt es vielleicht die Möglichkeit, auch zwischendurch die Heap-Integrität checken zu lassen?
Das könnte man dann einfach an vielen Stellen einbauen und könnte das Problem somit eingrenzen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

01.02.2012, 11:22

C-/C++-Quelltext

1
2
3
4
5
6
/// ...
int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(flags | _CRTDBG_ALLOC_MEM_DF);

// write memory [...]
_ASSERTE(_CrtCheckMemory());
@D13_Dreinig

Werbeanzeige