当前位置: 首页 > news >正文

Qt/C++运行报错:exited with code -1073741819

这是 Windows 系统下常见的 运行时崩溃 错误码,具体含义是:

0xC0000005:Access Violation(访问冲突),也就是程序试图访问它没有权限访问的内存地址。

该错误出现的原因可能有:

1. 空指针调用

常见的情况为:定义了一个指针变量,但是没有对指针变量初始化。

解决方法给指针变量初始化为NULL,或者新建一个指针对象

int *x2GBox = nullptr;

或者

QGroupBox *x2GBox = new QGroupBox("My Group Box");

2. 内存越界访问

比如数组访问越界、使用了野指针等。

前者比较简单,不作解释。第二种情况稍微复杂一点,常见的情形为:指针还没调用但是先运行了delete语句把指针删除了,此时指针就是野指针。

野指针的定义:

野指针(Dangling Pointer)是指向已经被释放或未分配内存的指针。与空指针不同,野指针指向的内存可能曾经有效但现在已不再安全使用。这类指针可能会导致不可预测的行为,包括程序崩溃、数据损坏或安全漏洞,因为它们引用的内存可能已被重新分配给其他用途。

野指针的主要产生原因:

  • 内存释放后未置空:当你通过 delete 或 free() 释放了指针所指向的内存后,若没有将该指针设置为 nullptr,它就成了野指针。为了避免这个问题,可以使用智能指针来定义和创建指针变量,笔者暂时还没用到,如果用到会持续更新。
  • 局部变量生命周期结束:如果函数内的局部变量地址被返回,并在外部使用,那么当这个局部变量的作用域结束后,指针就变成了野指针。例如:
int* badFunction() {int localVar = 10;return &localVar; // 返回局部变量的地址,危险!
}
  •  对象成员指针问题:在C++中,如果一个类的成员是指针类型,在复制对象时如果没有正确处理深拷贝和浅拷贝的问题,也可能导致野指针。

浅拷贝:在复制对象时,只是简单地复制了指针的值,即两个对象中的指针将指向同一块内存地址。这意味着如果其中一个对象删除了这块内存,另一个对象中的指针就变成了野指针,因为它现在指向了一块已经被释放的内存。
深拷贝:在复制对象时,不仅复制了指针本身,还为新对象分配了新的内存,并把原对象所指向的数据内容也复制了一份到新分配的内存中。这样,两个对象就各自拥有自己的数据副本,互不影响。 

使用浅拷贝的例子:

class String {
public:char* data;String(const char* p) {int length = strlen(p);data = new char[length + 1];strcpy(data, p);}// 默认的拷贝构造函数实现的是浅拷贝String(const String& other) {data = other.data; // 这里是浅拷贝}~String() {delete[] data;}
};

在这个例子中,如果我们创建了一个 String 对象并使用它来初始化另一个对象,那么这两个对象将共享同一个 data 数组。如果其中一个对象被销毁(调用析构函数),它会释放 data 指向的内存,这会导致另一个对象中的 data 成为野指针,因为这块内存已经不再有效。

使用深拷贝的例子:

class String {
public:char* data;String(const char* p) {int length = strlen(p);data = new char[length + 1];strcpy(data, p);}// 修改后的拷贝构造函数实现深拷贝String(const String& other) {int length = strlen(other.data);data = new char[length + 1]; // 分配新内存strcpy(data, other.data); // 复制数据}~String() {delete[] data;}
};

在修改后的版本中,拷贝构造函数为新对象分配了自己的内存,并从原始对象复制了数据。这就确保了每个 String 对象都拥有自己独立的数据副本,避免了由于共享数据而导致的野指针问题。

3.  库版本不匹配 / 缺失 Qt DLL 文件 

4. 插件缺失或路径错误

后面两个原因是AI给出的,笔者暂时还没遇到这种情况,如果有其他原因会持续更新......敬请期待

http://www.dtcms.com/a/263936.html

相关文章:

  • scp (Secure Copy Protocol)指令集
  • 向量数据库全面解析:原理、功能与主流产品对比
  • 学习笔记(C++篇)—— Day 9
  • Terraform Helm:微服务基础设施即代码
  • Kubernetes Pod 调度基础
  • 飞算JavaAI:重构软件开发范式的智能引擎
  • 【SQL知识】PDO 和 MySQLi 的区别
  • python __doc__
  • gateway白名单存储nacos,改成存储数据库
  • leetcode124-二叉树中的最大路径和
  • CPU缓存一致性
  • AI智能体在用户行为数据分析中有哪些应用?
  • 具身多模态大模型在感知与交互方面的综述
  • (十一)Spring WebSocket
  • Ansys Speos | Speos Camera 传感器机器视觉示例
  • vue-35(使用 Jest 和 Vue Test Utils 设置测试环境)
  • 列表元素滚动动画
  • LAN8720 寄存器概览和STM32 HAL库读写测试
  • CSS 安装使用教程
  • FreeRTOS任务切换
  • 力扣网C语言编程题:寻找两个正序数组的中位数
  • RIP 技术深度解析
  • 文心一言开源版测评:能力、易用性与价值的全面解析
  • [创业之路-457]:企业经营层 - 蓝海战略 - 价值创新不仅仅是技术创新
  • Java项目:基于SSM框架实现的智慧养老平台管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 大麦基于HarmonyOS星盾安全架构,打造全链路安全抢票方案
  • 【机器学习深度学习】模型微调的基本概念与流程
  • 06会话管理
  • 前端计算机视觉:使用 OpenCV.js 在浏览器中实现图像处理
  • 量化选股策略 聚宽