[EMAIL PROTECTED] wrote: > Suppose a C extension locally built an array of PyObject* 's as > follows... > > my_array = malloc(n * sizeof(PyObject*)); > for (i = 0; i < n; i++) { > my_array[i] = PyList_New(0); > } > > Q1: Must I do a Py_DECREF(my_array[i]) on all elements > before exiting this C extension function?
if you're releasing my_array before existing, yes. > (What if the elements got used in other objects?) if other parts of your program storing pointers to the elements in your array, those parts must make sure to increment the reference count when copying the pointer. that's the whole point of reference counting, of course: the count for an object should, at all times, match the number of *active* references your program has to that object. > Q2: Must I do free(my_array); at end of function?? unless some other part of your program holds on to it, of course you have to release it. it's a bit surprising that you have to ask this, really -- any C tutorial should explain how malloc/free works. > What if my_array[i]'s are used in other objects so that I can't > necessarily just nuke it!!! if those other objects do proper reference counting, everything will work find. if they don't, your program will crash sooner or later, no matter what you do in the function that allocates my_array. </F> -- http://mail.python.org/mailman/listinfo/python-list