The memory is not temporary, I am passing it out as an array, thus the malloc/free route will require double allocation(once for malloc/free, once for array.array). I am not using string because when I tried to pass the data in as string, pyrex complained about the conversion. However, I could probably use the same PyObject_AsReadBuffer function call to get at the data passed in to the function as a string and then pass it out as a string as well using the interface suggested ( PyString_FromStringAndSize and PyString_AsString ). Perhapse I need to substitute PyObject_AsWriteBuffer instead of PyString_AsString in order for my changes to get propegated back to the string object?
-Chris On 6/8/05, Adam Langley <[EMAIL PROTECTED]> wrote: > On 6/8/05, Chris Lambacher <[EMAIL PROTECTED]> wrote: > > My question is, is there a better way to > > allocate the memory for the array.array object than: > > a = array.array('B', [0] * (pixels * 2)) > > cdef unsigned char *buffer > temp_string = PyString_FromStringAndSize(NULL, length) > buffer = <unsigned char *> PyString_AsString(temp_string) > > That's one way to do it. But it looks like you just want an area of > memory so why not: > > cdef extern from "stdlib.h": > ctypedef unsigned long size_t > void *malloc(size_t size) > void free(void *mem) > > ? > > AGL > > -- > Adam Langley [EMAIL PROTECTED] > http://www.imperialviolet.org (+44) (0)7906 332512 > PGP: 9113 256A CC0F 71A6 4C84 5087 CDA5 52DF 2CB6 3D60 > -- Christopher Lambacher [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list