|We don't bite newbies here... much|
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.