devxlogo

Debug-friendly New and Delete

For better handling of resource leaks, try “marking” the allocation with ancillary information:

#include #include #include #include typedef void FDEL(void* p, size_t size);typedef FDEL* PFDEL;class A{	int a;	static void sfree(void* p, size_t size);	static void sfreedebug(void* p, size_t size);public:	virtual ~A() {}	void* operator new(size_t size);	void operator delete(void* p, size_t size);	void* operator new(size_t size,  char* Tag); };void A::operator delete(void* p, size_t size){	char* pb = (char*) p;	pb -= sizeof(PFDEL);	PFDEL pfdel = *(PFDEL*)pb;	(*pfdel)(pb, size);}void A::sfree(void* p, size_t size){	free(p);}void* A::operator new(size_t size){	char* pb = (char*) malloc(size + sizeof(PFDEL));	*(PFDEL*)pb = &sfree;	return (pb + sizeof(PFDEL));}struct DEBUGHDR{	size_t size;	char* Tag;	PFDEL pfdel;};void A::sfreedebug(void* p, size_t size){	char* pb = (char*) p;	pb += (sizeof(PFDEL) - sizeof(DEBUGHDR));	DEBUGHDR* phdr = (DEBUGHDR*) pb;	assert(size == phdr->size);	cout << "freeing " << phdr->size 	     << " For class " << phdr->Tag << "
";	free(pb);}void* A::operator new(size_t size, char* inTag){	char* pb = (char*) malloc(size + sizeof(DEBUGHDR));	DEBUGHDR* phdr = (DEBUGHDR*) pb;	phdr->size = size;	phdr->Tag= Tag;	phdr->pfdel = &sfreedebug;	cout << "new'ing " << phdr->size 		<< " For class" << phdr->Tag << "
";	return (pb + sizeof(DEBUGHDR));}class B : public A{	double b;};main(){	A* pa1 = new A;	B* pb1 = new B;	A* pa2 = new("A") A;	B* pb2 = new("B") B;	delete pa1;	delete pb1;	delete pa2;	delete pb2;	return 0;}

Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.

See also  How Engineering Leaders Spot Weak Proposals

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.