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

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

1

22.09.2005, 19:00

inline __FILE__ in Bezug auf new operator

Habe Jetzt nichts auf Anhieb gefunden, daher frage ich einfach mal:
ich habe folgendes Problem

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#ifdef _CRTDBG_MAP_ALLOC

inline void * __cdecl operator new(size_t s)
        { return ::operator new(s, _NORMAL_BLOCK, __FILE__, __LINE__); }

inline void* __cdecl operator new[](size_t s)
        { return ::operator new[](s, _NORMAL_BLOCK, __FILE__, __LINE__); }

#endif  /* _CRTDBG_MAP_ALLOC */


Da sollte eigentlich __FILE__ die Datei angeben in der der Befehl eingebunden wurde. Tut es aber nicht sondern gibt den Header an indem die Funktion definiert wurde undgeachtet den inline. Ich Nutzte VC++.net.
Also falls einer eine geniale Lösung hat á la Linkeroption oder so immer raus damit.
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.

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

22.09.2005, 19:29

"Arzt heile dich selbst"

^_^ dank Microdoof lässt es sich einfach lösen und zwar per:

C-/C++-Quelltext

1
#define new  new( _NORMAL_BLOCK, __FILE__, __LINE__)

und schon ist die Welt wieder schön^^
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.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

22.09.2005, 19:34

Zitat von »"Nox"«

"Arzt heile dich selbst"

^_^ dank Microdoof lässt es sich einfach lösen und zwar per:

C-/C++-Quelltext

1
#define new  new( _NORMAL_BLOCK, __FILE__, __LINE__)

und schon ist die Welt wieder schön^^


Doof und einfach? Das passt nicht. Microsoft hat sich bei der implementierung des new operators schon gedanken gemacht ;)

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

22.09.2005, 19:45

Naja aber ich finde es bedauernswert, dass es soviele Menschen gibt die nicht wissen, dass Microsoft schon eine Memleak Finder drinne haben und durch benutzten von extralibs Zeit und Res verschwenden...

P.S: apropo Zeit....ich habe jetzt auch erstmal keine Zeit mehr da ich locker über 100 leaks habe und KP woher die alle kommen....mag Unvermögen sein^_^
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

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

5

22.09.2005, 19:53

Zitat von »"Nox"«

Naja aber ich finde es bedauernswert, dass es soviele Menschen gibt die nicht wissen, dass Microsoft schon eine Memleak Finder drinne haben und durch benutzten von extralibs Zeit und Res verschwenden...


Ich weiß dass VS einen Leak-Detector dabei hat und verwende tortzdem VisualLeakDetector.

Hätte da noch eine Frage: Wofür "überlädst" du den operator new?

mfg Philipp

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

22.09.2005, 20:18

Ganz simpel. __FILE__ ist ein Marco und wird daher vor der inline Anweisung ausgeführt. Durch das define imgeht man das.
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.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

22.09.2005, 20:46

Zitat von »"Nox"«

Ganz simpel. __FILE__ ist ein Marco und wird daher vor der inline Anweisung ausgeführt. Durch das define imgeht man das.


Ja ja, der gute alte Präprozessor-Inline-Konflikt ;) Ja ja ;)

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

8

22.09.2005, 21:12

Zitat von »"Nox"«

Ganz simpel. __FILE__ ist ein Marco und wird daher vor der inline Anweisung ausgeführt. Durch das define imgeht man das.


Das ist mir schon klar, aber ich versteh nicht warum du das überhaupt machst.
Was hast du Großartiges davon, wenn du dem new __FILE__ und __LINE__ mitübergibst?

mfg Philipp

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

22.09.2005, 23:13

Der Unterschied ist, dass ich dadurch zusätzlich zu der Info, dass es einen Fehler(overflow, zeiger auf leeren platz, leaks) gibt, die Info bekomme, wo der Fehlerhafte Speicher reseviert wurde. Also aus

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

mach

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18}
normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Der Unterschied sollte einem klar sein ;)
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

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

10

22.09.2005, 23:56

Aha.
Ist aber irgendwie total unnötig.
Wenn du einfach _CRT_DBG_MAP_ALLOC definierst, gibt VS diese Infos auch aus.

Deshalb auch:

Zitat von »"Phil_GDM"«


Das ist mir schon klar, aber ich versteh nicht warum du das überhaupt machst

mfg Philipp

Werbeanzeige