Perl XS:内存管理

时间:2016-07-12 20:04:20

标签: c perl xs

我是Perl XS的新手。

我的简单测试函数获取一个字符串并附加一些内容。 在Perl中是一个标量字符串和一个输出。

在函数中我有一个malloc。什么是正确的释放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

谢谢! 克里斯

1 个答案:

答案 0 :(得分:4)

newSVpv创建字符串的内部副本,因此您可以在分配到free后调用RETVAL来释放内存。