C++ debug时提示 已触发了一个断点

问题现象: VS2013环境下debug 一个Qt程序,在关闭程序时出现错误

1、显示弹出Error对话框提示“已触发了一个断点”;

2、继续后继续弹出Error对话框提示“0xC0000374: 堆已损坏”


解决过程:

1、首先在相关类的析构函数打断点,根本还没到自己设定的程序断点处就出错了;

2、修改工程的C++\代码生成\运行库的属性设置为 MDd,问题依旧;

3、排查代码是否有内存越界覆盖了heap的情况?  (可以先注释掉内存操作相关的代码来验证) ,问题就在此处,修改bug,问题解决


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
要创建一个断点的类,可以使用C++的面向对象编程思想。以下是一个简单的断点管理类的示例代码: ```cpp #include <iostream> #include <vector> class BreakpointManager { public: void AddBreakpoint(int line) { breakpoints.push_back(line); } void RemoveBreakpoint(int line) { for (auto it = breakpoints.begin(); it != breakpoints.end(); ++it) { if (*it == line) { breakpoints.erase(it); break; } } } void WaitBreakpoint() { int currentLine = GetCurrentLine(); while (!IsBreakpointSet(currentLine)) { // 等待断点触发 // 可以使用条件变量或其他方法进行等待 } } private: std::vector<int> breakpoints; int GetCurrentLine() { // 获取当前行号的方法 // 可以使用__LINE__宏或其他方法获取当前行号 } bool IsBreakpointSet(int line) { for (auto breakpoint : breakpoints) { if (breakpoint == line) { return true; } } return false; } }; int main() { BreakpointManager bpManager; bpManager.AddBreakpoint(10); int x = 0; bpManager.WaitBreakpoint(); // 等待断点1触发 x = 10; bpManager.AddBreakpoint(20); bpManager.WaitBreakpoint(); // 等待断点2触发 x += 5; std::cout << "x = " << x << std::endl; return 0; } ``` 在上面的代码中,我们创建了一个名为 `BreakpointManager` 的类,用于管理断点。它提供了三个公共方法: - `AddBreakpoint(int line)`:用于添加断点。 - `RemoveBreakpoint(int line)`:用于删除断点。 - `WaitBreakpoint()`:用于等待断点触发。 内部实现中,我们使用一个 `std::vector<int>` 来存储断点的行号。`AddBreakpoint` 方法将行号添加到断点列表中,`RemoveBreakpoint` 方法从断点列表中删除指定的行号。`WaitBreakpoint` 方法将循环检查当前行号是否是已设置的断点行号,如果不是,则一直等待。 在示例中,我们创建了一个 `BreakpointManager` 对象 `bpManager`,并使用其方法来设置和等待断点。在主函数中,我们添加了两个断点,分别位于第10行和第20行。在每个断点之前,我们使用 `WaitBreakpoint` 方法来等待断点触发。 请注意,示例中的 `WaitBreakpoint` 方法只是一个简单的示例,它使用一个简单的循环来等待断点触发。在实际的实现中,你可能需要使用更高级的机制(如条件变量)来进行等待。另外,示例中的 `GetCurrentLine` 方法和 `IsBreakpointSet` 方法需要根据你的实际需求进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值