1

VS2008、C++でデバッグモードで実行されるコードがあります。問題は、コードを1行ずつデバッグしているときに、コードの非常に奇妙なポイントでクラッシュして次のように表示されることです。

デバッグアサーションが失敗しました。式:_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

私の経験では、閉じ中括弧で発生するクラッシュは、ブロックがスコープ外になったときに実行されたデストラクタでクラッシュが発生したことを意味します。とのデストラクタで何が起こっているかを確認しDecEdgeますPoint

于 2010-06-02T02:58:27.140 に答える
0

uが使用したポインタのいずれかを削除したかどうかを確認してください。これが理由である可能性があります。

于 2010-06-02T03:00:48.903 に答える
0

一部のライブラリはDEBUGモードでコンパイルされ、一部はRELEASEモードでコンパイルされています。

于 2010-06-02T03:01:15.347 に答える