Как добавить указатель C в словарь Python, используя Cython - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать словарь указателей на C structs . Моя функция C возвращает указатель на структуру, и я хочу добавить ее в словарь в Cython . Мой код компилируется нормально, но он выходит из строя, когда я запускаю его в коде Python "insertdict". Я хочу иметь возможность получить доступ к указателю структуры C позже в моем коде Cython из словаря.

Если я не приведу Foo как объект, код Cython не скомпилируется.

cython.pyx

def py_get_ptr(self):
    Foo = get_remote_ptr(foo1, foo1, foo3)
    self.mr_list[rma_buf] = <object> Foo

code.c

...
struct foo* get_remote_ptr(foo1, foo2, foo3)
{
    struct foo* Foo;
    // Foo gets assigned
    return Foo;
}

Я получаю эту ошибку:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000475797 in insertdict (value=0x7ffff055d420 <remote>, hash=8796075522393, key=0x7fffef4f9590, mp=0x7ffff7f010c8)
    at Objects/dictobject.c:802
802         MAINTAIN_TRACKING(mp, key, value);

Я не уверен, почему MAINTAIN_TRACKING терпит неудачу здесь, и я не могу, кажется, GDB в этот код.

...