2010/5/18 Mark de Vries

> Walt Chen wrote:
>
>> Hi
>>
>> I am new to XS but have coded for perl and C for a few year. Maybe
>> this question sounds stupid but I can not figure it out on perlgut and
>> perlxs at the moment.
>>
>
> Fairly new to XS myself...
>
>
>  I have an array which contains several reference of new created
>> hashes. I know that if I use method newRV_noinc for av_push in
>> construction stage, the reference to each hash is 1.
>>
>> After the code does some stuff, I need to clear the array as I want to
>> refill it. I have made my code in a concise example as following. Now
>> I wonder whether av_clear will decrement the reference number of hash1
>> and hash2 to 0. If it does, then hash would be destroyed
>> automatically, else I have to destroy it explicitly to avoid memory
>> leak. Could anyone point it out for me?
>>
>
> Can't find a definitive statement in the usual docs either. But an
> on-line copy of Advanced Perl Programming google found for me says:
> "[av_clear] Decrements the reference counts of its constituent scalars
> and replaces those positions with undef. It leaves the array intact."
>
> So it seems it will indeed delete/free the hashes.
>
> Cheers,
> Mark.
>
>

Hi Mark

Thank you for the inform. I can google the statement you provided. It is
very helpful for me to understand xs programming.

>
>
>>
>> ==========================================================================================
>> int size1 = 20;
>> int size2 = 21;
>> char name1[] = "foo1";
>> char name2[] = "foo2";
>>
>> HV *hash1 = newHV();
>> hv_store(hash1, "name",  strlen("name"),  newSVpv(name1,0),  0);
>> hv_store(hash1, "size",  strlen("size"),  newSViv(size1),  0);
>> av_push(array, newRV_noinc((SV*)hash1));  //reference to hash1 is 1
>>
>> HV *hash2 = newHV();
>> hv_store(hash2, "name",  strlen("name"),  newSVpv(name2,0),  0);
>> hv_store(hash2, "size",  strlen("size"),  newSViv(size2),  0);
>> av_push(array, newRV_noinc((SV*)hash2));  //reference to hash2 is 1
>>
>> .......
>> av_clear(array); //whether reference number of hash1 and hash2
>> decremented here??
>>
>
>
>

Reply via email to