«поврежденный двойной связанный список» после завершения программы расширения C ++ Python - PullRequest
1 голос
/ 27 сентября 2019

Я занимаюсь разработкой программы, которая расширяет python с помощью кода C ++, и похоже, что мне что-то не хватает при инициализации или очистке.Признак состоит в том, что когда программа завершает свою работу, она печатает что-то вроде этого:

*** glibc detected *** ... corrupted double-linked list: 0x0000000001ad0700 ***
======= Backtrace: =========
.../python2.7/site-packages/numpy/core/../.libs/libgfortran-ed201abd.so.3.0.0(+0xc249a)[0x7f242063749a]
...

Я делаю это для инициализации:

PyMODINIT_FUNC init_dosemap()
{
    Py_InitModule3( "_dosemap", methods, ... );
    import_array();
}

Массив инициализируется следующим образом:

npy_intp dims[] = { width, height };
int nd = sizeof(dims) / sizeof(dims[0]);
PyObject * ndArray = PyArray_SimpleNew( nd , dims, NPY_FLOAT32 );
Py_INCREF( ndArray );

заполняется так:

for( int y = 0; y < dims[ 1 ]; ++y )
    for( int x = 0; x < dims[ 0 ]; ++x )
        * (float *) PyArray_GETPTR2( ndArray, x, y ) = ...

и возвращается так:

PyObject* out = Py_BuildValue( "(Offf)", ndArray, ... );
Py_INCREF( out );
return out;

Кажется, что никаких проблем не возникает, пока программа не завершится.Что мне здесь не хватает?

...