k3xji wrote:
Interestaing I changed malloc()/free() usage with PyMem_xx APIs and the problem resolved. However, I really cannot understand why the first version does not work. Here is the latest code that has no problems at all:static PyObject * penc(PyObject *self, PyObject *args) { PyObject * result = NULL; unsigned char *s= NULL; unsigned char *buf = NULL; unsigned int v,len,i = 0; if (!PyArg_ParseTuple(args, "s#", &s, &len)) return NULL; buf = (unsigned char *) PyMem_Malloc(len); if (buf == NULL) { PyErr_NoMemory(); return NULL; } /* string manipulation. */ result = PyString_FromStringAndSize((char *)buf, len); PyMem_Free(buf); return result; }
In general I'd say don't mix your memory allocators. I don't know whether CPython implements PyMem_Malloc using malloc, but it's better to stick with CPython's memory allocators when writing for CPython. -- http://mail.python.org/mailman/listinfo/python-list
