I had a function in C which I used to extend python, previously using the BOOST_MODULE
function to accomplish this. This error came up when transitioning to the python-C API. I am certain that the run_mymodule
function runs fine without this wrapper.
static PyObject * wrap_run_mymodule(PyObject *, PyObject *args) {
char *file1, *file2, *file3;
PyObject *tmpp;
if(!PyArg_ParseTuple(args, "sssO", &file1, &file2, &file3, &tmpp))
return NULL;
return Py_BuildValue("i", run_mymodule(file1, file2, file3, tmpp));
}
static PyMethodDef myModule_methods[] = {
{"run_mymodule", (PyCFunction) wrap_run_mymodule, METH_VARARGS},
{NULL, NULL}
};
extern "C" void initmymodule(void)
{
(void) Py_InitModule("mymodule", myModule_methods);
}
the declaration of the function is of this form: int run_mymodule(char *file1, char *file2, char *file3, PyObject *tmpp)
Here is the exact error message I get:
python(35137,0x7fff76453310) malloc: *** error for object 0x10afcfb78: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
How can I solve this problem? Where is this malloc error coming from? In python, I am passing strings as the first three arguments, and a python class as the fourth argument. Of course, I am happy to put probes into my code.
SanderMertens suggested I post the valgrind output-
$ valgrind python test_mymodule.py
==30715== Memcheck, a memory error detector
==30715== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==30715== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==30715== Command: python test_mymodule.py
==30715==
==30715== Syscall param posix_spawn(pid) points to unaddressable byte(s)
==30715== at 0x3D266E: __posix_spawn (in /usr/lib/system/libsystem_kernel.dylib)
==30715== by 0x100001DC2: ??? (in /usr/local/bin/python)
==30715== by 0x25E5FC: start (in /usr/lib/system/libdyld.dylib)
==30715== by 0x1: ???
==30715== by 0x1000138CF: ???
==30715== by 0x104803AD1: ???
==30715== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==30715==
Python(30715,0x7fff74a8e310) malloc: *** mach_vm_map(size=140735173898240) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
Abort trap: 6