[Moscow.pm] Вопрос про возвращаемые значения из Perl XS
aznaourian nikita
nikita-aznaourian на yandex.ru
Пт Июл 9 08:12:28 PDT 2010
Есть XS процедура, которая возвращает ссылку на массив SV*.
В процедуре создается новый массив
AV* array = (AV*)sv_2mortal((SV*)newAV());
AV* array2 = newAV();
av_push(newArray, newSVpv("value2", 0));
av_push(newArray, (SV*)newArray2);
return newRV((SV*)newArray);
При этом в перле выводится следующее:
[
'value',
undef
];
cобсвтенно вопрос - почему? Как работает XS сборщик мусора? Понятно, что REFCNT для newArray2 = 1, Но он также равен 1 и для newSVpv(...)
В чем разница между этими двумя указателями?
Понятно, что можно это исправить , если второй массив тоже сделать с mortal. Но не понятно, почему, так происходит.
Подробная информация о списке рассылки Moscow-pm