问题描述
我在尝试使用 Python/C++ API 时遇到 nullptr
错误。这些错误中的大多数都来自相当长/复杂的代码,其中有人试图引用一个指针而不先将其设置为某些内容,但是我能够仅用几行代码来复制我的行为,我不知道发生了什么.
这是 MWE:
#include <Python.h>
#include <iostream>
int main()
{
std::cout << "Hello World!\n\n";
PyObject *pyl;
pyl = PyLong_FromLong(3);
std::cout << PyLong_AsLong(pyl) << std::endl;
}
我正在 Visual Studio Community 2017 中将其编译为 C++ 控制台应用程序。我的 Python 版本是 3.8.5。我正在使用发布模式和 x64 模式下的调试进行构建(我的 Python 安装是 x64)。我在配置属性中完成了以下操作:
- 将包含python.lib和python38.lib的目录添加到VC++目录→库目录;
- 将包含 Python.h 的目录添加到 C/C++ → General → Additional Include Directories;
- 将包含python.dll和python38.dll的目录添加到系统PATH变量中。
错误出现在最后一行,并说:
Exception thrown: read access violation.
obj->ob_type was nullptr.
调用堆栈如下所示:
如果我尝试不同的东西,例如我分配了 pyl = PyList_New(3);
,我得到一个稍微不同的错误,Exception thrown: read access violation. _PyRuntime.gc.generation0 was nullptr.
我不得不想象我的 Python 安装可能搞砸了,或者我遗漏了一些非常明显的东西,但我在其他任何地方都没有看到过这样的错误,所以你们的任何想法都将不胜感激。
注意:Python 文档说要在代码中包含定义 #define PY_SSIZE_T_CLEAN
。这不会改变我所看到的。
进一步编辑:在 Hello World 打印后直接添加对 Py_Initialize()
的调用给了我这个打印输出:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)