Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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 PyUnicode_AsUTF8()分段错误_Python_C_Segmentation Fault_Embedded - Fatal编程技术网

Python PyUnicode_AsUTF8()分段错误

Python PyUnicode_AsUTF8()分段错误,python,c,segmentation-fault,embedded,Python,C,Segmentation Fault,Embedded,我得到了分段错误。 如何解决这个问题? 我想要的是从uuid4()获取字符串。 谢谢。我可以通过一些修改成功地将其编译并打印出值: gcc test.c `python3.4-config --cflags --ldflags` 我认为问题的原因很可能是:编译python的编译器与编译测试程序test.c时使用的编译器不同。您可以找到正确的gcc版本来编译代码,也可以使用当前的gcc编译器重新编译python3.4 至于test.c的原始版本,它在我的MBP上给出了这个错误: $ ./a.ou

我得到了
分段错误
。 如何解决这个问题? 我想要的是从
uuid4()
获取字符串。
谢谢。

我可以通过一些修改成功地将其编译并打印出值:

gcc test.c `python3.4-config --cflags --ldflags`
我认为问题的原因很可能是:编译python的编译器与编译测试程序
test.c
时使用的编译器不同。您可以找到正确的gcc版本来编译代码,也可以使用当前的gcc编译器重新编译python3.4

至于test.c的原始版本,它在我的MBP上给出了这个错误:

$ ./a.out
bd94cb52-9278-41a8-bc5a-ad05eff91188
$/a.out
(空)
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py”,第1292行,在
t=_pickSomeNonDaemonThread()
文件“/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py”,第1299行,在
对于枚举()中的t:
enumerate中的文件“/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py”,第1269行
返回列表(_active.values())+列表(_limbo.values())
TypeError:内置操作的参数类型错误

我真的不知道发生了什么。

我遇到了一个
致命的Python错误:使用
PyUnicode\u AsUTF8
时XXX块堆栈下溢。 对我来说,诀窍在于该函数使用Python API分配内存,因此必须使用cpython.mem中的
PyMem\u Free()
来释放内存


malloc()与free()搭配,就像PyMem_malloc()与PyMem_free()搭配一样。

我没有错误。您使用的是什么版本的gcc?在哪个平台上?我得到了这个:“TypeError:内置操作的参数类型错误”。很奇怪。我在OSX 10.9.4上使用llvm gcc(Apple llvm版本6.0(clang-600.0.45.3)),你能编译这个程序吗?是的。让我把这些信息写在答案里。评论是可怕的,顺便说一句,你需要提供更多的信息,正如我前面提到的:什么是gcc版本和平台。你可以编辑这个问题,并把信息放在那里这个版本的作品,但我想找出背后的原因。。。在上面的评论中看到我的Hello world,它对我有效,所以我的第一段代码应该有效,但它没有。
#include <Python.h>
#include <stdio.h>

int
main (int argc, char *argv[])
{
    PyObject *pName, *pModule, *pFunc;
    PyObject *pValue;

    Py_Initialize ();

    pName = PyUnicode_FromString ("uuid");

    pModule = PyImport_Import (pName);
    Py_DECREF (pName);

    pFunc = PyObject_GetAttrString (pModule, "uuid4");

    pValue = PyObject_CallObject (pFunc, NULL);

    PyObject_Print(pValue, stdout, Py_PRINT_RAW); // my change
    printf ("\n"); // make the printout look nicer

    Py_Finalize ();

    return 0;
}
$ ./a.out
bd94cb52-9278-41a8-bc5a-ad05eff91188
$ ./a.out
(null)
Exception ignored in: <module 'threading' from '/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py'>
Traceback (most recent call last):
  File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1292, in _shutdown
    t = _pickSomeNonDaemonThread()
  File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1299, in _pickSomeNonDaemonThread
    for t in enumerate():
  File "/usr/local/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 1269, in enumerate
    return list(_active.values()) + list(_limbo.values())
TypeError: bad argument type for built-in operation