Pycharm 中用pyqt调pytorch深度学习算法时debug正常但运行时错误代码 -1073741819 (0xC0000005)踩坑记录

问题描述

最近在做一个用pyqt界面与检测算法结合的窗口软件项目,思路是通过登录界面的按钮实现多窗口跳转,在目标检测子窗口中检测图片按钮的槽函数如下所示,其功能实现对选择的图像送入模型并绘制目标框,然后回显到label中。在Debug时一切正常,但是run时却报标题所述错误代码。

一、最初出问题的代码:

        img = Image.open(self.fname)
        img = img.convert('RGB')
        pred = self.model.detect_image(img)
        pred = ImageQt.ImageQt(self.pred)
        self.label.setPixmap(QPixmap.fromImage(pred))       # 注意这两行代码,需要用这种方式来转换PIL与QPixmap格式
        self.label.setScaledContents(True)  # 图片自适应label大小

经网上查阅错误代码很有可能是指访问内存冲突。思来想去最终如此解决
二、解决方案:

		img = Image.open(self.fname)
        img = img.convert('RGB')
        self.pred = self.model.detect_image(img)  # 在构造函数中预定义一个pred属性,该对象是窗口类对象
        self.pred = ImageQt.ImageQt(self.pred)
        self.label.setPixmap(QPixmap.fromImage(self.pred))       # 注意这两行代码,需要用这种方式来转换PIL与QPixmap格式
        # sleep(1)
        self.label.setScaledContents(True)  # 图片自适应label大小

将pred由槽函数的局部变量改为绑定到窗口对象上的类属性,运行就一切正常。

三、出错原因分析
之前的出错原因可能是由于pred是局部对象,在执行窗口程序时,执行完检测按钮的槽函数后局部变量就都回收了,造成回到主程序的时候label访问不到此前图片的内存,故报错。此是需要注意的点,此后的开发过程中应注意

### PyQt6 在 PyCharm运行崩溃的原因分析 退出代码 `-1073741819 (0xC0000005)` 表明程序遇到了访问冲突错误,通常是因为试图读取或写入未分配的内存区域引起的[^1]。这种问题可能由多种因素引起,以下是常见的原因及其对应的解决方案: #### 1. **多线程管理不当** 如果在 PyQt6 应用中使用了自定义线程(如 `QThread`),可能会因为线程资源释放不及或者主线程提前终止而导致崩溃。例如,当子线程仍在执行关闭窗口可能导致此类错误。 解决方法: - 确保在线程完成之前不会销毁其父对象。 - 使用信号槽机制来安全地中止线程操作而不是直接用 `quit()` 或者 `terminate()` 方法[^3]。 ```python class Worker(QtCore.QObject): finished = QtCore.pyqtSignal() def __init__(self, parent=None): super().__init__(parent) @QtCore.pyqtSlot() def do_work(self): try: # 执行耗任务... pass finally: self.finished.emit() # 发送完成信号 ``` --- #### 2. **第三方库兼容性问题** 某些情况下,PyQt6 可能与其他依赖项存在版本冲突,尤其是涉及图形界面渲染的相关库(如 OpenGL)。这可能是由于底层驱动支持不足造成的。 解决方法: - 更新显卡驱动到最新版本。 - 尝试更换不同的 Qt 后端实现方式,比如通过设置环境变量强制指定软件光栅化模式: ```bash export QT_XCB_GL_INTEGRATION=none ``` 对于 Windows 用户,则可以考虑启用 DirectX 渲染路径作为替代方案[^2]。 --- #### 3. **内存泄漏或越界访问** 该类异常也可能源于应用程序内部逻辑缺陷所引发的非法指针解引用行为。具体表现形式包括但不限于数组下标超出范围、动态分配的对象忘记删除等情况。 预防措施: - 对所有输入参数进行全面验证。 - 利用专业的静态代码检测工具扫描潜在隐患位置;同借助 Valgrind 等诊断平台定位实际发生的泄露实例。 --- #### 4. **外部插件干扰** 部分 IDE 插件(特别是针对 Python 的调试增强功能)有会改变默认加载顺序甚至注入额外指令片段至目标进程中去,从而间接影响稳定性。 建议行动: - 关闭不必要的附加组件后再重新测试一遍看现象是否有改善迹象; - 如果确认是由特定扩展包所致的话则反馈给官方维护团队寻求进一步指导。 --- ### 总结 综上所述,要彻底根除上述提到的各种可能性就需要逐一排查直至找到确切根源为止。在此过程中务必保持耐心并做好充分准备迎接各种意外状况的发生!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值