chris chris - 1 year ago 108
Perl Question

Perl XS: Memory management

I am absolutely new to Perl XS.

My simple testfunction gets a string and appends something.
In Perl is is a scalar-string in and one out.

In the function I have a malloc. Whats the correct way to free the mem?

SV *foo (str)
SV *str
unsigned char *strbuf;
size_t strlen;
strbuf = (unsigned char *) SvPV (str, strlen);

int n = strlen + 10;
unsigned char *buf = malloc (n);

strncpy (buf, strbuf, strlen);
strncat (buf, "0123456789", 10);

RETVAL = newSVpv (buf, n);


Answer Source

newSVpv creates an internal copy of the string, so you can simply free the memory by calling free after assigning to RETVAL.