向量和迭代器的分段错误? [关闭]

Posted

技术标签:

【中文标题】向量和迭代器的分段错误? [关闭]【英文标题】:Segmentation fault with vectors and iterators? [closed] 【发布时间】:2014-10-08 21:04:41 【问题描述】:

我在尝试使用一个 cpp 文件并尝试使用 Valgrind 定位错误时遇到分段错误,但我很困惑。

由于代码很大,下面只放一小部分:

【问题讨论】:

附带说明:您确定您的实验室可以准确地发布代码吗?此外,我只会发布与您发布的错误消息相关的代码。您没有发布与任何代码相关的错误。啊。杰里米的回答更快:) 所有那些“???”只能表示你没有在调试模式下编译它。 你正在做这样的事情:int nV = geo.getNumVerts(); for(int i=0; i<nV; i++) canDecimate[i] = 0; 但我不知道canDecimate 是否至少有nV 项。如果有任何问题可能导致问题,它会为两个不同的容器/数组使用单个上限值。 @csx - 您的代码通常只是假设值在“范围内”。换句话说,您的代码不会进行任何错误检查。要修复它,您需要在代码中进行必要的检查,以确保您正在访问范围内的项目。您再次将其添加到您的帖子int tri = *iter; if(triann[tri].a != v),不检查*iter 是否在范围内(假设triann 是数组、向量或类似类型)。 【参考方案1】:

看起来您正在编译器上运行 valgrind。除非您尝试调试编译器,否则您应该在您的应用程序上运行 valgrind:

valgrind --leak-check=yes ./MyApp

(当然,用适当的可执行文件名和参数替换./MyApp

(说明:valgrind 是一个运行时分析工具;它以您的应用程序作为输入。它不像其他一些调试工具那样是编译器工具)

【讨论】:

@csx 给出可执行文件的名称

以上是关于向量和迭代器的分段错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]

C++:当我添加看似无关的代码行时,分段错误消失了

将向量的整数内容打印为字符串会导致分段错误 [关闭]

带有向量和字符串的 C++ 分段错误

分段错误:在 C++ 中弹出向量时出现 11

访问算法的 lambda 函数中的迭代器导致我出现分段错误