On Monday, September 2, 2002, at 11:35 AM, Sisyphus wrote: > Only time I used 'malloc()' and 'free()' in an inline function > I struck problems if the function was called a number of times. > I forget just how big that 'number of times' was - and the > amount of memory involved might well have had a bearing. (It > worked fine if the function was called only once - which led me > to believe that 'free()' was not doing the job, and the memory > was being freed only when the app terminated.) > > Someone posted the recommendation that 'New()' and 'Safefree()' be used > instead, and I've been using them with no trouble.
I looked a little closer at the docs, and I think you're right. So here's an updated version of the constructor/destructor routines: SV* new(char* class, char* name, char* rank, long serial) { Soldier* soldier; New(0, soldier, 1, Soldier); soldier->name = strdup(name); soldier->rank = strdup(rank); soldier->serial = serial; return sv_setref_pv(newSViv(0), class, (void *)soldier); } void DESTROY(SV* obj) { Soldier* soldier = (Soldier*)SvIV(SvRV(obj)); Safefree(soldier->name); Safefree(soldier->rank); Safefree(soldier); } It would also be nice to show a typemap that gets rid of all the typecasting, object wrapping, etc. here and just lets you use a Soldier* type in prototypes. -Ken