chris chris - 1 year ago 166
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
CODE:
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);
OUTPUT:
RETVAL


thanks!
Chris

Answer Source

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

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download