libstdc++/8636: ostringstreams lose their data
Paolo Carlini
pcarlini@unitus.it
Sat Nov 30 20:56:00 GMT 2002
The following reply was made to PR libstdc++/8636; it has been noted by GNATS.
From: Paolo Carlini <pcarlini@unitus.it>
To: gcc-gnats@gcc.gnu.org, nobody@gcc.gnu.org
Cc:
Subject: Re: libstdc++/8636: ostringstreams lose their data
Date: Thu, 21 Nov 2002 13:15:49 +0100
Hello again,
I think I found the reason for this, it's not a bug.
If 'oss' is an ostringstream, then calling
x = oss.str().c_str();
is a bad idea, because oss.str() returns a copy of the contents of oss
by value, i.e. a temporary value that is free'd right after this
statement. Therefore x is invalid, pointing to a free'd memory region.
--> oss.str().c_str() will always return a pointer to a temporary
value.
For example, strcpy(dest, oss.str().c_str()) would work, but
not x=oss.str().c_str(); strcpy(dest,x);
I believe this is ok with the standard.
Sorry, my fault.
Regards,
Michael
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8636
More information about the Gcc-prs
mailing list