Perl XS: управление памятью

Я абсолютно новичок в Perl XS.

Моя простая тестовая функция получает строку и добавляет что-то. В Perl есть скалярная строка в и одна из.

В функции у меня есть malloc. Какой правильный способ освободить мем?

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 ответ

Решение

newSVpv создает внутреннюю копию строки, так что вы можете просто освободить память, вызвав free после присвоения RETVAL,

Другие вопросы по тегам