You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS C++调用Python/C API程序返回退出码-1073741819求助

Python/C API调用程序退出码-1073741819问题排查

问题背景

已完成以下环境配置:

  • 安装Python 3.11
  • 卸载VS2019并安装VS2022
  • 配置PYTHON_HOME环境变量
  • 在VS项目中设置附加包含目录与链接依赖

编译阶段已解决python311_d.lib找不到的问题,但运行程序时返回退出码**-1073741819**(对应Windows错误码0xC0000005,即内存访问违规),重复操作无法解决。

代码示例

#include <iostream>
#include <Python.h>

int main() {
    Py_Initialize();  // Initialize the Python interpreter

    // Execute a simple Python expression
    PyObject* result = PyRun_String("2 + 2", Py_eval_input, PyEval_GetGlobals(), PyEval_GetGlobals());

    // Check if execution was successful
    if (result == nullptr) {
        PyErr_Print();  // Print any Python errors
        return 1;
    }

    // Extract the result as a C integer
    int value = PyLong_AsLong(result);
    Py_DECREF(result);  // Cleanup

    // Print the result
    printf("Result: %d\n", value);

    Py_Finalize();  // Clean up the Python interpreter
    return 0;
}

可能原因与解决方法

1. 调试/发布模式与Python库不匹配

  • 问题:Debug模式下链接了Release版Python库(python311.lib),或Release模式下链接了Debug版库(python311_d.lib),导致运行时内存访问冲突。
  • 解决:
    • Debug模式:链接python311_d.lib,确保使用Python Debug版本(注意:官方默认安装的Python是Release版,Debug版需自行编译或获取对应分发包)。
    • Release模式:链接python311.lib,对应官方Release版Python。

2. 平台位数不匹配

  • 问题:Python安装位数(32/64位)与VS项目平台设置不一致,导致跨位数调用引发内存访问错误。
  • 解决:
    • 查看Python位数:运行python -c "import sys; print(sys.maxsize > 2**32)",返回True为64位,False为32位。
    • 在VS项目属性中,将「平台」设置为对应位数(x64或x86)。

3. Python解释器初始化失败未检查

  • 问题:Py_Initialize()可能因环境变量、路径问题初始化失败,后续调用PyEval_GetGlobals()会返回空指针,触发内存访问违规。
  • 解决:在初始化后添加检查逻辑:
    Py_Initialize();
    if (!Py_IsInitialized()) {
        fprintf(stderr, "Python解释器初始化失败\n");
        return 1;
    }
    

4. PyEval_GetGlobals()调用时机错误

  • 问题:PyEval_GetGlobals()需要在有活跃执行帧的情况下调用,Py_Initialize()后直接调用可能返回空指针,导致PyRun_String参数无效。
  • 解决:改用创建空字典作为全局变量:
    PyObject* globals = PyDict_New();
    PyObject* result = PyRun_String("2 + 2", Py_eval_input, globals, globals);
    // 后续处理...
    Py_DECREF(globals);
    

5. 运行时找不到Python DLL

  • 问题:程序运行时无法定位python311.dll或python311_d.dll,导致解释器加载失败。
  • 解决:
    • 将Python安装目录(如C:\Python311)添加到系统PATH环境变量。
    • 或复制对应DLL文件到程序输出目录(Debug/Release文件夹)。

内容的提问来源于stack exchange,提问作者Shmack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:51:27