C++:如何解决在未知点引起的首次异常?

2024-04-05

我正在处理的一个 C++ 项目在抛出第一次机会异常时终止。当我第一次尝试访问调试模式下的 Visual Studio 2008 时,会发生这种情况map<pair<int,int>, int>其中包含单个键值对。这段代码在逻辑上没有任何问题。

我已经阅读了有关第一次机会例外的内容,并了解它们可能并不总是有问题。尽管如此,我还是尝试打破所有此类异常,并且正如预期的那样,发现生成了几个不会导致任何问题的异常。

我正在处理的类非常大,并且包含许多自定义内存分配。我推测其中之一是导致问题的原因。然而,我花了几个小时试图找到一种方法来确定出了什么问题,但一直无法做到。

下面列出了第一次机会异常输出。这不是很有帮助!

First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x762cd09c in theapp.exe: 0xC0000005: Access violation reading location 0x6c696d00.
First-chance exception at 0x0050ae33 in theapp.exe: 0xC0000005: Access violation reading location 0x00000010.
Unhandled exception at 0x0050ae33 in theapp.exe: 0xC0000005: Access violation reading location 0x00000010.

我现在真的很挣扎,不知道如何继续。

谁能建议我如何解决这个问题,并准确找出问题所在?我将非常感谢你的建议。

UPDATE

这是相关代码。调试器在嵌套 FOR 中列出的第一个 cout 语句处中断:

        // Inside operator() :

        map<pair<int,int>,int> resultIdByStructIds;
        pair<int,int> spair (-1,-1); // Structure pair ids reusable reference.

        int nextMapEntryId = 0;
        int nextNumCandidates = 0;
        // For each remaining candidate.
        for (int ci = 0; ci < numCandidates; ) {
            // If candidate has been mapped or found not viable this mapping round,
            // move past it.
            if (candidatesDoneThisRound[ci] == currentMappingRoundId) {
                ++ci;
                continue;
            }

            Candidate candidate = candidates[ci];
            const int tId = candidate.tVertexId;
            const int pId = candidate.pVertexId;

            // Grab the result for this structure pair.
            // Create it if it doesn't exist.
            // Avoid copying as slight optimisation; simply
            // store pointer to true result instead.
            spair.first = tInfos[tId].structure->id;
            spair.second = pInfos[pId].structure->id;

            // DEBUG
            cout << "resultIdByStructIds size: " << resultIdByStructIds.size() << endl;
            for (map<pair<int,int>,int>::const_iterator ids_id = resultIdByStructIds.begin(); ids_id != resultIdByStructIds.end(); ++ids_id) {
                cout << ids_id->first.first << endl; // * Debugger breaks here.
                cout << ids_id->first.second << endl;
                cout << ids_id->second << endl;
                printf("Structures(%i,%i) => %i\n",ids_id->first.first,ids_id->first.second,ids_id->second);
            }
            //

            // code continues...

UPDATE 2

这是相关地图的鼠标悬停描述的图像;正如迈克尔·伯尔所说,它似乎已损坏。


一般来说,要查明应用程序崩溃的代码位置,您可以在“调试/异常”下打开异常处理。在这种情况下,您将展开最后一个分支并检查访问冲突。当然,这将停止所有访问违规,而不仅仅是不良访问(访问 0x10)。您可以通过在最后已知时刻打开陷阱来最大程度地减少这种情况。

通常您会发现一些内存使用错误。确定此类错误原因的最简单方法是使用 BoundChecker 等第三方工具,一旦您损坏内存,它就会向您大喊大叫。缺乏这一点,雷蒙德陈的建议是正确的。找出哪个对象出了问题,并使用监视窗口查看它何时发生变化。或者更有效的是,使用数据断点功能让程序在特定地址的数据发生更改时停止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:如何解决在未知点引起的首次异常? 的相关文章

随机推荐

  • 从 Java 调用 PHP 方法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要从 java 调用 PHP 方
  • 当 Activity 不在前面时,暂停 Android 中的 CountDownTimer

    我有一个使用从 10 开始倒数的 CountDownTimer 的活动 当该活动不再处于焦点时 例如用户接到电话或其他情况 如何暂停该计时器 然后在用户返回时恢复计时器活动 这可能吗 我会向 onTick 处理程序添加一些内容 以保存类中计
  • 删除 Torch 张量中的行

    我有一个火炬张量如下 a tensor 0 2215 0 5859 0 4782 0 7411 0 3078 0 3854 0 3981 0 5200 0 1363 0 4060 0 2030 0 4940 0 1640 0 6025 0
  • 编写替换背景图像的用户脚本

    这是代码 UserScript name Wood Background namespace http www nationstates net nation ellorn description Changes background to
  • 无法使用参数列表在 Swift 2 中调用“sendAsynchronousRequest”

    我目前正在重写部分 Swift 1 2 代码以与 Swift 2 0 兼容 实际上我无法弄清楚对 sendAsynchronousRequest 进行了哪些更改 目前我的所有请求都失败了 NSURLConnection sendAsynch
  • 使用 FFmpeg 创建静音视频和黑屏视频

    我正在尝试使用 FFmpeg 从本地 mp4 文件生成以下内容 原始视频的副本 无音频 原始视频的副本 带有音频但没有视觉效果 而是黑屏 该文件还需要是 mp4 格式 阅读完文档后 我正在努力使终端命令正确 要删除音频 我尝试了此命令但没有
  • SupportMapFragment 与 MapFragment 性能对比

    之间有什么区别吗支持MapFragment http developer android com reference com google android gms maps SupportMapFragment html and 地图片段
  • 确定应用程序是 WinForms 还是 WebForms

    有没有办法在运行时确定运行的应用程序是WinForms还是Web Edit 如果我同时引用两者 实际上是否有问题System Web and System Windows Forms在我的班级图书馆里 概括 迄今为止 到目前为止我学到了什么
  • C# 中的计时器初始化和竞争条件?

    我在里希特的书中看到了这段代码 下面的代码演示了如何进行线程池线程调用 该方法立即启动 然后每 2 秒启动一次 1 internal static class TimerDemo 2 3 private static Timer s tim
  • 是否可以根据模板类型参数的嵌套 typedef 的存在来专门化模板定义?

    我有一个模板 template
  • 不相关的锁定语句之后的读指令是否可以移到锁定之前?

    这个问题是评论的后续this https stackoverflow com questions 40979715 do semaphores prevent instruction reordering thread 假设我们有以下代码
  • 多线程编程中什么是公平性?

    什么是线程公平性或并发 多线程编程中的公平性 我用谷歌搜索过 有很多关于多线程的信息 但不完全是关于公平性的 有人可以解释一下吗 非常欢迎举一个例子 公平性基本上类似于不同线程能够advance无论他们在做什么 100 公平意味着 所有线程
  • 应用 API 响应转换的最佳位置 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在异步操作创建器中 我从服务器获取数据 对于我的用例来说 数据的格式不太好 我需要对其进行转换以在 UI 中使用它 问题 我应该 在数据到达后立
  • MKOverlayRenderer 在地图视图上显示 UIImage

    我正在尝试在 iOS 7 中的地图视图上显示图像 我将 MKOverlayRenderer 子类化如下 MapOverlayRenderer h import
  • Room 未向表中插入数据

    有趣的是 它有时会正确执行插入操作 我不知道为什么以及如何会发生这种情况 所以 我无法弄清楚我在哪里犯了错误 这是我的项目文件 1 SentFilesDao java Dao public interface SentFilesDao Qu
  • 在 VSCode 中通过缩进更改纯文本颜色

    我有兴趣在 VSCode 中进行讲座并在简单的文本文件中做笔记 因为我已经使用它进行编码 然而 对于我的一生 我无法弄清楚如何更改简单的文本颜色 我想要的是在一种缩进深度处具有一种文本颜色 例如 Notes a b Notes会是不同的颜色
  • 删除字符串中空格的最快方法

    我试图从数据库表中的字符串中获取由 分隔的多个电子邮件地址 但它也返回了空格 我想快速删除空格 以下代码确实删除了空格 但每当我尝试在字符串中获取大量电子邮件地址 例如 30000 然后尝试删除它们之间的空格时 它也会变得很慢 删除这些空格
  • 当 Repeater 的委托高度发生变化时调整 ColumnLayout

    我已经设置了一个名为测试1 qml包含以下内容 import QtQuick 2 6 import QtQuick Layouts 1 3 Rectangle width 800 height 1000 ColumnLayout ancho
  • UIViewController 中的扩展边缘属性是什么?

    我在论坛上读过有关此属性的内容 大多数人将此属性设置为 false 或在情节提要中取消选中它 我自己这样做是因为当我在视图中嵌入 UINavigation 控制器时 顶部栏将我的 UITextView 向下推 以便文本在底部开始编辑 取消选
  • C++:如何解决在未知点引起的首次异常?

    我正在处理的一个 C 项目在抛出第一次机会异常时终止 当我第一次尝试访问调试模式下的 Visual Studio 2008 时 会发生这种情况map