Can't answer your leaking memory/reference count problem, but please consider these points:
1. Generally when you iterate over a length, you want for (i = 0; i < len_data; ++i) [not <=] 2. You're iterating i over the length of data. Are you sure that odometer is long enough to support GETIV(odometer, i) ?? Best of luck, cmac On Jan 28, 2011, at 2:06 AM, Xavier Noria wrote:
Hi, this C function is leaking memory: AV* __next_subset(SV* data_avptr, SV* odometer_avptr) { AV* data = GETAV(data_avptr); AV* odometer = GETAV(odometer_avptr); I32 len_data = av_len(data); AV* subset = newAV(); IV adjust = 1; int i; IV n; for (i = 0; i <= len_data; ++i) { n = GETIV(odometer, i); if (n) { av_push(subset, newSVsv(*av_fetch(data, i, 0))); } if (adjust) { adjust = 1 - n; SETIV(odometer, i, adjust); } } return subset; } I think the problem is the reference count of the AV*. Is that correct? How should I build/return it to prevent that?