向量和迭代器的分段错误? [关闭]
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 给出可执行文件的名称以上是关于向量和迭代器的分段错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章