On Wed, Mar 23, 2011 at 9:04 AM, dennis jenkins <dennis.jenkins.75@xxxxxxxxx> wrote: > On Wed, Mar 23, 2011 at 5:08 AM, Adrian Schreyer <ams214@xxxxxxxxx> wrote: >> >> you are right, it returns a char *. >> >> The prototype: >> >> char *function(bytea *b); >> >> The actual C++ function looks roughly like this >> >> extern "C" >> char *function(bytea *b) >> { >> string ism; >> [...] >> return ism.c_str(); >> } >> > > > Don't do that. You are returning a pointer to an unallocated buffer > (previously held by a local variable). c_str() is just a const > pointer to a buffer held inside "ism". When ism goes out of scope, > that buffer if freed. > > Either return "std::string", or strdup() the string and have the > caller free that. (but use the postgresql alloc pool function to > handle the strdup. I don't recall that function's name off the top of > my head). that would be pstrdup, and it's the way to go (you don't have to pfree). who says C doesn't have garbage collection? merlin -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general