C API String Parsing/Returning

k3xji sumerc at gmail.com
Tue Apr 7 02:46:13 EDT 2009


Whan I run the following function, I see a mem leak, a 20 mb of memory
is allocated and is not freed. Here is the code I run:

>>> import esauth
>>> for i in range(1000000):
...     ss = esauth.penc('sumer')
...
>>> for i in range(1000000):
...     ss = esauth.penc('sumer')
...

And here is the penc() function.


static PyObject *
penc(PyObject *self, PyObject *args)
{
	unsigned char *s= NULL;
	unsigned char *buf = NULL;
	PyObject * result = NULL;
	unsigned int v,len,i = 0;

	if (!PyArg_ParseTuple(args, "s#", &s, &len))
        return NULL;

	buf = strdup(s);
	if (!buf) {
		PyErr_SetString(PyExc_MemoryError,
			"Out of memory: strdup failed");
		return NULL;
	}


	/*string manipulation*/


	result = PyString_FromString(buf);
	free(buf);
	return result;
}


Am I doing something wrong?

Thanks,



More information about the Python-list mailing list