new/delete überladen
-
hi,
ich mache folgendes mit dem g++:
#include <stdio.h> inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) { void *p = (void *)malloc(nSize); //... return p; } inline operator delete(void *p) { //... free(p); } #define new new(__FILE__, __LINE__, __FUNCTION__) int main(void) { int *pBla = new int; delete pBla; return 0; }
mein problem ist jetzt folgendes: mein new-operator wird aufgerufen, und des funzt auch wunderbar... nur mein delete-operator wird irgendwie net aufgerufen... habt ihr vielleicht ne ahnung wieso nicht? ich bin hier voll am verzweifeln *g*
MFG Mr. Gray
-
Deine C++ Code
#include <stdio.h> inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) { void *p = (void *)malloc(nSize); //... return p; } inline operator delete(void *p) { //... free(p); } #define new new(__FILE__, __LINE__, __FUNCTION__) int main(void) { int *pBla = new int; delete pBla; return 0; }
Meinem Vorschlag
#include <stdio.h> inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) { void *p = (void *)malloc(nSize); //... return p; } inline operator delete(void *p) { //... free(p); } #define new new(__FILE__, __LINE__, __FUNCTION__) int main(void) { int *pBla = new int; int bla = 0; &bla = pBla; delete bla; // du must den Wert löschen nicht die Adresse !!! return 0; }
-
ich verschieb das mal nach C++
@StepPilot
nein, so geht das auf keinen Fall!
-
du musst das inline weg tun.