[xml] xmlNewNode allocates memory that ist already in use
- From: Eric Zurcher <Eric Zurcher csiro au>
- To: xml gnome org, t kutzer bebro de
- Subject: [xml] xmlNewNode allocates memory that ist already in use
- Date: Tue, 18 Feb 2003 09:55:44 +1100
Thomas Kutzer wrote:
With the second solution a new problem occured which I want to describe
here:
Following two lines of code:
temp2 = (xmlChar *)IntToStr(i_value).c_str();
nodePtr3 = xmlNewTextChild(NodePtr3, NULL, (xmlChar *)"value",
temp2);
After the call of xmlNewTextChild there is just "0" in the part of memory
to which temp2 adresses.
This is NOT a problem with libxml2, the Borland compiler, its runtime
library or byte alignment. It IS a problem with the way Thomas is using
a C++ "temporary" object.
In this example, the Borland runtime's IntToStr function returns an
object of type String. This object's c_str() member function returns a
pointer to its internal string buffer, and this pointer is then stored
in "temp2". But once this statement has executed, the String object goes
out of scope, and so its destructor is called. This leaves temp2 holding
an invalid pointer, since it points to an address which has been
deallocated.
The same problem would occur with the following equivalent code, but
here the scoping problem is a little more explicit.
{
String s = IntToStr(i_value);
temp2 = (xmlChar *)s.c_str();
} // At this point, s is destroyed; temp2 now points to freed memory!
nodePtr3 = xmlNewTextChild(NodePtr3, NULL, (xmlChar *)"value", temp2);
xmlMalloc allocates a part of memory to which temp2 also adresses.
When I compile the programm with these lines of code the fault doesn't
occur:
String s = IntToStr(i_value);
temp2 = (xmlChar *)s.c_str();
nodePtr3 = xmlNewTextChild(NodePtr3, NULL, (xmlChar *)"value",
temp2);
Has anyone an idea how I can eliminate this fault?
Yes, the code you show here will eliminate this fault, since the String
object remains in scope. It should also work to use:
nodePtr3 = xmlNewTextChild(NodePtr3, NULL, (xmlChar *)"value",
(xmlChar *)IntToStr(i_value).c_str());
Thanks
Thomas Kutzer
--
Eric Zurcher
CSIRO Livestock Industries
Canberra, Australia
Eric Zurcher csiro au
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]