[lug] C++ libraries in Linux

Jeff Walker jwalker at matchlogic.com
Tue Sep 18 10:33:01 MDT 2001


Perhaps this is a place where C++ differs from C (I am still learning some
of those), but if you free (delete) the string, it seems like a pointer to
that string would be invalid.  Am I wrong?  If you copy the string, you will
have the same problem as the original code, you have a lasting string that
never gets free'd.

Or, you could avoid the whole mess and say that this behaves like strdup(),
where, if you use it, it allocates memory that you must free yourself.  Of
course, I know what the "C founding fathers" would have to say about that (I
forget who said that if you allocate memory, you should free it yourself,
not relying of the caller to free it for you), but sometimes, you have to do
such things. ;-)

-- 
Jeff Walker                   MatchLogic, Inc.
jwalker at matchlogic.com        7233 Church Ranch Blvd.
Voice 1 (303) 222-2105        Westminster, CO  80021
Fax   1 (303) 222-2001        www.matchlogic.com


-----Original Message-----
From: Keith Brown [mailto:kbrown8 at uswest.net]
Sent: Tuesday, September 18, 2001 10:10 AM
To: lug at lug.boulder.co.us
Subject: Re: [lug] C++ libraries in Linux


Hi,

I believe you have memory leak in your example.  Once you do buf.str(), the
program owns the *char that is returned, unless it tells strstream
otherwise,
which I forget how to do.  I believe you need to do it like:

char * s = buf.str();
rtnval = s;
delete [] s;
return rtnval;

Keith

"Scott A. Herod" wrote:

> Hi,
>   I use something like the following:
>
> #include
> <strstream>
> string paraNode::toString()
> {
>     string rtnval;
>     strstream buf;
>
>     buf << "Paragraph: "
>         << ATTR_ALIGN << " = " << _align << ", "
>         << ATTR_WRAP_MODE << " = " << _mode
>         << ends;
>
>     rtnval = buf.str();
>     return rtnval;
> }
>
> > Can it be true?  There are no converters to go from an int to a string?
Or
> > a double to a string?
> >
> > --Keith
> _______________________________________________
> Web Page:  http://lug.boulder.co.us
> Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug

--
Keith Brown
12640 Xavier St
Broomfield, CO 80020
303.438.8169


_______________________________________________
Web Page:  http://lug.boulder.co.us
Mailing List: http://lists.lug.boulder.co.us/mailman/listinfo/lug



More information about the LUG mailing list