【问题标题】:Clion error while running c++ project运行 c++ 项目时出现 Clion 错误
【发布时间】:2016-02-28 13:29:03
【问题描述】:

我有一个我自己制作的 C++ 项目,但我遇到了一个奇怪的错误。大约 50% 的时间我运行项目时会出错

进程以退出代码 -1073741819 (0xC0000005) 结束

我不知道为什么会这样。我只是在运行我自己制作的 Dijkstra 算法并将几行打印到控制台。数据永远不会改变,我只使用了几个字节的内存。我不明白为什么项目有时会设法运行,有时会给我一个错误。

【问题讨论】:

  • 发生这种情况是因为您的程序中存在错误......如果没有该程序,我们将无法为您提供更多帮助。
  • 你可以在这里粘贴你的代码。
  • 如果它那么小,你可以把它贴在这里。这是人们扫描的极限,但它可能是显而易见的。
  • 0xc0000005 是 Windows 上的访问冲突。您可能引用了一个空(或其他无效)指针。运行调试器应该会将您指向有问题的代码行。
  • 这里没有人会下载你的整个项目,编译它,然后运行它。如果它在 50% 的时间内发生,那么您应该能够在调试器中捕获它。

标签: c++ clion


【解决方案1】:

您的图表最多可以有 9 个顶点:

Graph *G = new Graph(9);

我假设这意味着任何特定顶点的值都可以从 0 到 8,因为代码似乎使用顶点作为各种向量的索引。

但是,当您在Dijkstra::Dijkstra(Graph *G, int s) 中创建previousVertex 向量时,由于某种原因,您给它的元素比顶点数少一个:

previousVertex = vector<int>(V - 1); // V is the number of vertices in G
                                     //   which is 9 in your example project
                                     //   so it will have 8 elements and
                                     //   can be indexed with 0-7

但是你稍后用各种元素的顶点值来索引它:

previousVertex[v] = u; // I believe that `v` can have the value 8 at times

我认为您可能超出了previousVertex 向量的末尾。我不知道为什么如果它在 50% 的时间内崩溃,你在调试器中会遇到问题。

【讨论】:

  • 我认为这一定是问题所在,因为它现在似乎不再令人崩溃了。然而,它仍然让我感到困惑,它是如何在“运行”时仅压碎 50% 而在“调试器”时压碎 0 次
  • 用 MSVC++ 试试吧(有一个免费的 VS 2015 社区版)。 Visual Studio 的 C++ 库对容器访问和迭代器使用进行了出色的调试检查。我认为 GCC 没有这种诊断方法。
  • 我确实在使用 previousVertex[8]。那绝对是个问题。我有V-1 的原因是因为没有以前的顶点作为起始顶点,所以我想让我们输入V-1,没有意识到这可以作为索引,而不仅仅是大小。
猜你喜欢
  • 1970-01-01
  • 2017-07-29
  • 2015-05-06
  • 1970-01-01
  • 2021-06-19
  • 2020-11-16
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多