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

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

22.02.2009, 17:05

[Erledigt] Problem mit _CrtDumpMemoryLeaks

Wenn ich folgendes Programm habe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h>
#include <crtdbg.h>

int main(int argCount, char** argv)
{
    int* x = new int[100];

    _CrtDumpMemoryLeaks();
  return 0;
}


erhalte ich folgenden Output

Quellcode

1
2
3
4
5
Detected memory leaks!
Dumping objects ->
{80} normal block at 0x00935B60, 400 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.


Obwohl Zeile und Datei angegeben werden sollten, fehlen diese!
Wenn ich statt new malloc verwende werden Datei und Zeile angezeigt.
PS: Ich verwende VS2008 Professional

Kenn jemand dieses Problem und die Lösung für selbiges?

mfg Philipp

Anonymous

unregistriert

2

22.02.2009, 17:31

Da du den Source hast, gibt es neben dem include Verzeichnis und lib Verzeichnis, das Verzeichnis "crt". Darin ist der Source der CRT und es gibt dort eine Datei namens "malloc" und eine namens "new" ;)

Vergleich die beiden.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

3

22.02.2009, 17:48

Ähm ich glaub da musst du mir nocht ein bisschen weiter helfen.

Hab mir die Dateien angesehen, verstehe aber nicht ganz, worauf du hinaus willst.

mfg Philipp

Anonymous

unregistriert

4

22.02.2009, 18:16

malloc.h

Zeile 210 - 234. Hier wird _malloca definiert und unter anderem so dinge wie _ALLOCA_S_HEAP_MARKER.

Sowas findet sich z. B. bei new nicht. Ich würde hier mal drauf tippen, dass du hier deine Nachforschungen ansetzen solltest.

Leider kann ich dir dazu nicht direkt zu helfen, da ich in der CRT sehr ungerne bin ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

22.02.2009, 18:53

Hat einen anderen Grund. Ich nutze folgende Variante:

Muss in jede cpp rein oder ggf. auch global in einen Header. Kann allerdings zu Problemen mit anderen Libs führen. Daher lieber in jede cpp. Das define von new ist nötig, weil er sonst die Makros falsch auflöst. Führt allerdings zu Problemen mit einigen new Operationen (z.B. innerhalb von der Irrlicht nutzen die eine Variante von new die sich mit dem define nicht verträgt).

C-/C++-Quelltext

1
2
3
4
5
6
#if defined(_DEBUG) && defined(_WIN32)
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif


und einmalig in die main rein:

C-/C++-Quelltext

1
2
3
#ifdef _CRTDBG_MAP_ALLOC
   _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

6

22.02.2009, 19:05

Jep, auf diese Vorgehensweise bin ich gerade vorher auch gestoßen (gamedev.net).
Aber ich hatte gehofft, dass es doch eine elegantere Lösung gibt, als in allen CPP-Dateien new neu zu definen.

Also dieses crtdbg Zeugs fand ich schon immer komisch, deshalb habe ich unter VS2005 auch Visual Leak Detector verwendet.

Leider scheint dieser unter VS2008 nicht mehr korrekt zu funktionieren.

Kenn jemand vielleicht einen anderen (und kostenlosen) Leak Detector der mit VS2008 funktioniert?

mfg Philipp

Werbeanzeige