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

Reply via email to