|P is for Practical|
perlembed: mortalize an AV, get "Attempt to free unreferenced scalar" - don't mortalize, leaks memoryby edan (Curate)
|on Jul 10, 2006 at 07:23 UTC||Need Help??|
edan has asked for the
wisdom of the Perl Monks concerning the following question:
I am trying to call a perl subroutine from C, passing it an array ref. I am not managing to do this correctly without leaking memory. Can someone please tell me why?
If I mortalize the "AV" (commented line below), I get "Attempt to free unreferenced scalar". But If I don't, I'm leaking memory, as evidenced by Devel::Leak (though for some reason it isn't telling me that the AV is left around, rather the SV containing the name of the subroutine being called, "MyModule::test" in the below code - weird). It seems like I should be mortalizing it, but I can't figure out why it's getting "over-decremented" when I do.
Can someone help clear this up for me, please?
Update: I have tinkered some more, and found a formula that seems to work, but I don't understand why. The following sub-snippet appears to work:
So I'm not supposed to mortalize the scalars that I push onto the array? Why is that? It makes my problem disappear, which I like, but I don't understand it, which I don't like. Any further thoughts are appreciated.