Py_CompileString()
とPyEval_EvalCode()
を使用していくつかのPythonコードを呼び出そうとしています。それは正常に動作しますが、PythonコードにエラーPy_Finalize()
が含まれている場合は、Pythonでエラーが発生した後にPy_Finalize()がクラッシュする
Py_Initialize();
PyObject* code = Py_CompileString("pprint('Hello World')", "", Py_file_input);
PyObject* m = PyImport_AddModule("__main__");
PyObject* d = PyModule_GetDict(m);
Py_DECREF(m);
PyObject* r = PyEval_EvalCode(code, d, d);
Py_DECREF(d);
if (!r)
PyErr_Print();
Py_DECREF(code);
Py_Finalize();
期待通りの出力がある:
Traceback (most recent call last):
File "", line 1, in <module>
NameError: name 'pprint' is no defined
しかし、その後Py_Finalize()
への呼び出しプログラムで私は、プログラムの実行
PyObject* code = Py_CompileString("print('Hello World')", "", Py_file_input);
に3行を変更し、細かい終了crashes.If 。何がここで間違っている?
私はGDBでプログラムを実行すると、私はこの出力を得る:
Windows:
Program received signal SIGSEGV, Segmentation fault.
0x1e01a030 in python32!PyType_IsSubtype() from C:\Windows\SysWOW64\python32.dll
Linux:
Program received signal SIGSEGV, Segmentation fault.
0xb7ef17bb in visit_decref (op=0xb78c87ec, data=0x0) at Modules/gcmodule.c:321
321 Modules/gcmodule.c: File or Directory not found.
in Modules/gcmodule.c
なぜ各手順の結果を確認していませんか? –
コードに接続されていないため、m&dが変更されないと思ったので確認しませんでした。そして、これは事実です:誰もエラーを返しません。 –