1

我有一段代码在 VS2008,C++ 中以调试模式运行。问题是,当我逐行调试代码时,在代码的一个非常奇怪的地方,它崩溃并说:

调试断言失败。表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

崩溃点在第一个封闭的大括号上(在 mesh->edges[e].needsUpdate=false; 之后)我不明白为什么在大括号上?这对你们有意义吗?

到底是怎么回事?

for(int e=0; e<mesh->edges.size(); e++)
{
    if(mesh->edges[e].valid && mesh->edges[e].v[0]>=0 && mesh->edges[e].v[1]>=0 &&
        mesh->points[mesh->edges[e].v[0]].writable && mesh->points[mesh->edges[e].v[1]].writable)
    {
        //update v_hat and its corresponding error
        DecEdge Current = DecEdge(e);
        pair<Point, float> ppf = computeVhat(e);
        Current.v_hat = ppf.first;
        Current.error = ppf.second;

        edgeSoup.push(Current);
        mesh->edges[e].needsUpdate=false;
    }
}
4

3 回答 3

1

根据我的经验,在右大括号上发生的崩溃意味着崩溃发生在当块超出范围时运行的析构函数中。我会检查析构函数中发生了什么DecEdgePoint.

于 2010-06-02T02:58:27.140 回答
0

检查您是否删除了您使用的任何指针。这可能是一个原因。

于 2010-06-02T03:00:48.903 回答
0

您有一些在 DEBUG 模式下编译的库和一些在 RELEASE 模式下编译的库。

于 2010-06-02T03:01:15.347 回答