Debugging 卷括号上的崩溃:调试断言失败

Debugging 卷括号上的崩溃:调试断言失败,debugging,crash,visual-c++-2008,Debugging,Crash,Visual C++ 2008,我有一段代码,在VS2008,C++中调试模式下运行。 问题是,当我在代码的一个非常奇怪的点上逐行调试代码时,它崩溃并说: 调试断言失败。 表达式:\块\类型\有效(pHead->nBlockUse) 崩溃点位于第一个闭合的花括号上(在网格->边[e]之后)。needsUpdate=false;) 我不明白为什么要用花括号?这对你们有意义吗 发生了什么事 for(int e=0; e<mesh->edges.size(); e++) { if(mesh->edges[e

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

调试断言失败。 表达式:\块\类型\有效(pHead->nBlockUse)

崩溃点位于第一个闭合的花括号上(在网格->边[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;
    }
}
for(int e=0;eedges.size();e++)
{
如果(网格->边[e]。有效(&&mesh->边[e]。v[0]>=0&&mesh->边[e]。v[1]>=0&&
网格->点[mesh->边[e].v[0]]。可写(&mesh->点[mesh->边[e].v[1]]。可写)
{
//更新v_hat及其相应的错误
下降沿电流=下降沿(e);
对ppf=计算vhat(e);
Current.v_hat=ppf.first;
Current.error=ppf.second;
向上推压(电流);
网格->边[e].needsUpdate=false;
}
}

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

根据我的经验,在闭合大括号上发生的崩溃意味着崩溃发生在块超出范围时运行的析构函数中。我会检查
DecEdge
Point
的析构函数中发生了什么,检查您是否删除了您使用过的任何指针。这可能是一个原因。

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

有些库在调试模式下编译,有些在发布模式下编译。

有些库在调试模式下编译,有些在发布模式下编译。

那么这是怎么回事呢???那么这又是怎么回事???