You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2003/08/06 17:11:38 UTC
DO NOT REPLY [Bug 22178] New: -
XMemory is incompatible with Visual C++ debug macros
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22178>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22178
XMemory is incompatible with Visual C++ debug macros
Summary: XMemory is incompatible with Visual C++ debug macros
Product: Xerces-C++
Version: 2.3.0
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: Normal
Priority: Other
Component: Miscellaneous
AssignedTo: xerces-c-dev@xml.apache.org
ReportedBy: alby@exceloncorp.com
When using Visual C++ with MFC, is common to have such a declaration in every
file of a project:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
This will replace, in debug mode, the standard "new" operator with a version
that tracks the allocation with the file name and line number where the it was
performed; when the program is shut down, a report is printed containing the
allocations that weren't matched by the corresponding delete.
The problem is: if a file contains that macro definition and some code
belonging to a class derived from XMemory (say, you have derived SAXParser and
inside the constructor you allocate some data using "new"), you get an error
telling you that no "operator new" with 3 arguments can be found.
The solution is to add to the XMemory interface the declaration for this
operator, routing the call to the standard one, like in the patch attached.
===================================================================
RCS file: /home/cvspublic/xml-xerces/c/src/xercesc/util/XMemory.cpp,v
retrieving revision 1.7
diff -u -r1.7 XMemory.cpp
--- XMemory.cpp 14 Jul 2003 18:51:05 -0000 1.7
+++ XMemory.cpp 6 Aug 2003 15:01:05 -0000
@@ -83,6 +83,11 @@
return (char*)block + headerSize;
}
+void* XMemory::operator new(size_t size, const char* file, int line)
+{
+ return operator new(size);
+}
+
void* XMemory::operator new(size_t size, MemoryManager* manager)
{
assert(manager != 0);
@@ -111,6 +116,11 @@
//The HP compiler is complaining about duplicate overloading of delete
#if !defined(XML_HPUX) && !defined(XML_BORLAND)
+
+void XMemory::operator delete(void* p, const char* file, int line)
+{
+ operator delete(p);
+}
void XMemory::operator delete(void* p, MemoryManager* manager)
{
===================================================================
RCS file: /home/cvspublic/xml-xerces/c/src/xercesc/util/XMemory.hpp,v
retrieving revision 1.4
diff -u -r1.4 XMemory.hpp
--- XMemory.hpp 14 Jul 2003 18:51:05 -0000 1.4
+++ XMemory.hpp 6 Aug 2003 15:01:05 -0000
@@ -94,6 +94,15 @@
void* operator new(size_t size);
/**
+ * This method overrides the MFC debug version of the operator new
+ *
+ * @param size The requested memory size
+ * @param file The file where the allocation was requested
+ * @param line The line where the allocation was requested
+ */
+ void* operator new(size_t size, const char* file, int line);
+
+ /**
* This method overrides placement operator new
*
* @param size The requested memory size
@@ -111,10 +120,19 @@
//The HP compiler is complaining about duplicate overloading of delete
#if !defined(XML_HPUX) && !defined(XML_BORLAND)
/**
+ * This method provide a matching delete for the MFC debug new
+ *
+ * @param p The pointer to the allocated memory
+ * @param file The file where the allocation was requested
+ * @param line The line where the allocation was requested
+ */
+ void operator delete(void* p, const char* file, int line);
+
+ /**
* This method provide a matching delete for the placement new
*
* @param p The pointer to the allocated memory
- * @param memMgr An appliation's memory manager
+ * @param memMgr An application's memory manager
*/
void operator delete(void* p, MemoryManager* memMgr);
#endif
Alberto
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org