Сограждане, не поленитесь чиркнуть пару строчек, кто давно
разобрался с предметом...
Вопрос в сущности простой.
Делаю я в своей С-программе следующее
---
HV* hvcmd = newHV();
SV* keystr = newSVpv("str", 4);
SV* keybin = newSVpv("bin", 4);
SV* strs[2];
SV* bins[2];
strs[0] = newSVpv("str1", 5);
strs[1] = newSVpv("str2", 5);
bins[0] = newSVpv("bin1", 5);
bins[1] = newSVpv("bin2", 5);
AV* avstr = av_make(2, (SV**)strs);
AV* avbin = av_make(2, (SV**)bins);
hv_store(hvcmd, "str", 3, newRV_noinc((SV*)avstr), 0);
hv_store(hvcmd, "bin", 3, newRV_noinc((SV*)avbin), 0);
AV* inCmds = get_av("g_inCmd", TRUE);
av_push(inCmds, newRV_noinc((SV*)hvcmd));
call_argv("q", G_DISCARD | G_NOARGS, NULL);
---
Причем делаю это в цикле...
В функции q я его собственно печатаю и даллее очищаю:
---
sub q
{
print Data::Dumper->Dump([\@g_inCmd], [qw(g_inCmd)]), " \n";
@g_inCmd = ();
}
---
В итоге на каждой иттерации получаю массив хешей массивов типа:
$g_inCmd = [
{
'bin' => [
'bin1',
'bin2'
],
'str' => [
'str1',
'str2'
]
},
...];
Внимание вопрос: объясните дураку почему у меня память течет?
Можно ткнуть в конкретное место perlguts или perlapi...
Ну простите, не понял я еще до конца как он внутри устроен... ;(
игрался я и с
strs[0] = sv_2mortal(newSVpv("str1", 5));
и с
sv_unref(strs[0]);
В общем налицо непонимание... ;-\
Ответ на:
комментарий
от tarle
Ответ на:
комментарий
от idle
Ответ на:
комментарий
от tarle
Ответ на:
комментарий
от idle
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Не дайте умереть! (2001)
- Форум Не дайте умереть (2002)
- Форум Не дайте умереть (2002)
- Форум Не дайте умереть (2002)
- Форум Не дайте умереть :) (2000)
- Форум Пора бы сделать garbage collection... (2006)
- Форум не дайте умереть слепым! (2001)
- Форум SQUID! Не дайте умереть (2001)
- Форум не дайте умереть!!! линукс глючит страшно (2001)
- Форум [garbage collection] А как переводят на русский слово ephemeron? (2011)