首页 > 解决方案 > 当 key > size 1 时 PyDic 段错误

问题描述

我正在尝试使用 python 绑定来连接我的 c++ 代码的简单 python 包装器。我目前想返回一个值映射。当我尝试创建字典条目时,我的应用程序在 key > size 1 时出现段错误。即使忽略对象的返回,我仍然会收到错误消息。也只添加“ke”段错误。我已经成功返回了一个带有 {"k": 10} 的字典,但就是这样。

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:

标签: pythonc++

解决方案


您不能使用加载了CDLL. 你需要使用PyDLL.

(另外,不要忘记进行引用计数管理。这不是导致崩溃的原因,但它仍然是一个问题。)


推荐阅读