Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyDict_SetItemString segfaults_Python_C_Python C Api - Fatal编程技术网

Python PyDict_SetItemString segfaults

Python PyDict_SetItemString segfaults,python,c,python-c-api,Python,C,Python C Api,我正在尝试为Python3编写一个简单的C扩展,当我尝试向字典中添加字符串时,它会出错。这是我的密码: #include <stdio.h> #include <Python.h> int main() { PyObject* dict_p = PyDict_New(); char *val = "idjewijjd"; PyObject* val_p = PyUnicode_FromString(val); const char *

我正在尝试为Python3编写一个简单的C扩展,当我尝试向字典中添加字符串时,它会出错。这是我的密码:

#include <stdio.h>
#include <Python.h>



int main() {
    PyObject* dict_p = PyDict_New();
    char *val = "idjewijjd";
    PyObject* val_p = PyUnicode_FromString(val);
    const char *key = "dhsjdshj";

    for (int j=0; j<8; j++) { 
        printf("%d\n", PyUnicode_READ_CHAR(val_p,j));
    }

    int r = PyDict_SetItemString(dict_p, key, val_p);
    return 0;
}
以下是gdb回溯:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff78d9b38 in PyUnicode_InternInPlace () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
(gdb) bt
#0  0x00007ffff78d9b38 in PyUnicode_InternInPlace () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#1  0x00007ffff78b3818 in PyDict_SetItemString () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#2  0x0000555555554d7f in main () at t.c:16

我在代码本身中找不到错误。编译错误吗?

您忘记初始化解释器:

Py_Initialize();

嵌入Python的程序必须在尝试调用任何Python函数之前初始化解释器。这对于由已初始化的解释器加载的扩展模块不是必需的。

您忘记初始化解释器:

Py_Initialize();
嵌入Python的程序必须在尝试调用任何Python函数之前初始化解释器。对于由已初始化的解释器加载的扩展模块,这不是必需的