当键>大小1时,PyDic segfaults

2024-07-03 08:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python绑定在我的c++代码周围连接一个简单的python包装器。我现在想返回一个值映射。当我尝试创建字典条目时,我的应用程序在键>;大小1。即使忽略返回的对象,我仍然得到错误。也只加上“ke”。我已经成功地返回了一个带有{“k”:10}的dict,但仅此而已

C++:

extern "C" void Test() {
    signal(SIGSEGV, handler);   // install our handler
    PyObject* results = PyDict_New();
    printf("Adding k\n");
    PyDict_SetItemString(results, "k", PyLong_FromLong(3000));
    printf("Adding ke\n");
    PyDict_SetItemString(results, "ke", PyLong_FromLong(3000));
    printf("Adding key\n");
    PyDict_SetItemString(results, "key", PyLong_FromLong(3000));
}

Python:

import ctypes

_test_bench = ctypes.CDLL('<path_to_so>')


_test_bench.Test.argtypes = None
_test_bench.Test.restype = None


def test() -> None:
    global _test_bench
    _test_bench.Test()


test()

输出:

Adding k
Adding ke
Error: signal 11:

Tags: keytestnonesignalresultshandlerbenchke
1条回答
网友
1楼 · 发布于 2024-07-03 08:23:09

不能从加载了CDLL的库中使用pythonapi。你需要使用PyDLL

(另外,别忘了做你的refcount管理。这不是坠机的原因,但仍然是个问题。)

相关问题 更多 >