RE: Free memory after newSVpv

[email protected] (bulk 88)
Newsgroups perl.xs
Message-ID <[email protected]>


________________________________
> From: [email protected] 
> Date: Fri, 2 Nov 2012 22:40:31 -0700 
> Subject: Free memory after newSVpv 
> To: [email protected] 
> 
> Very quick question I hope someone can answer. 
> 
> I'm calling sendTask() in a C++ library where I pass a char* that is 
> supposedly malloced and returned so I need to free() it. 
> 
> The problem is when I call Safefree() below the code fails (in odd 
> ways), but if I don't call Safefree() /free() then it works ok. 
> 
> 
> Looking at the code below, if "buffer" is malloc'd and returned and 
> newSVpv copies the buffer into the SV then is it correct to call 
> Safefree() or free() as I'm doing below? 
> 
> 
> void 
> sendTask( MyClient * THIS, unsigned int id, char * message_payload, 
> unsigned int message_length ) 
> PPCODE: 
> char * buffer = NULL; 
> int buffer_length; 
> int status; 
> 
> THIS->sendTask( id, message_payload, message_length, buffer, 
> &buffer_length, &status ); 
> XPUSHs( sv_2mortal( newSVpv( buffer, buffer_length ) ) ); 
> Safefree( buffer ); 
> XPUSHs( sv_2mortal( newSViv( status ) ) ); 
> 


Do not confuse Perl's memory allocator as described in perlclib with your C compiler's or OS's clib's malloc. They are 2 different allocators and the mem blocks come from 2 different pools (not 100% true, but let us keep this simple and sane). Read the docs for whatever the sendTask C++ method is and figure out what the C++ lib's docs tell you to use to free var buffer.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.