5

Qt プロジェクトをデバッグ モードで実行すると、この "Debug Assertion Failed" エラーが発生することがあります ( image )。コンパイラが何も言わず、エラーを見つけるために何をすべきかわからないため、どこが間違っているのかわかりません。

Qt Creator 2.4.1、Qt 4.8.1 を使用して、Windows Vista でプログラムを作成しています。

私のプログラムは、レーザー デバイスからいくつかの情報を読み取り、次のようなコードでファイルに保存する必要があります。

void runFunction()
{
    configure_Scanning(...);

    while(...)
    {
        // do something
        scanFunction();
        // do something
    }
}

そして、これは私の「有罪」機能です(問題があると思います)

void scanFunction()
{
    file.open();

    data = getDataFromDevice();

    if(flag)
    {
        if(QString::compare(lineB,"")!=0)
        {
            QTextStream out(&file);
            out << lineB << endl;
            lineB = "";
        }
        lineA.append(data+"\t");
    }
    else
    {
        if(QString::compare(lineA,"")!=0)
        {
            QTextStream out(&file);
            out << lineA << endl;
            lineA = "";
        }
        lineB.prepend(data+"\t");
    }

    file.close();
}

lineAとlineBは最初は 2 つの void QStringです: アイデアは、情報を 2D マトリックスに保存するために双方向スキャンを行うことです (-X から +X へ、またはその逆、Y は指定されたターゲットに移動します)。lineAは (-)to(+) の読みを記憶します。lineBは (+)to(-) の読みを記憶します。スキャン方向が変わると、lineA (またはlineB ) をファイルに書き込み、スキャンを続行します。

言うこと分かりますか?解決策を教えていただけますか?

私の英語に感謝し、申し訳ありません:P

4

2 に答える 2

11

_CrtIsValidHeapPointerUserData は、デバッグ ヒープ チェッカーによって認識されるヒープの破損があることを意味します。削除された動的オブジェクトに情報を書き込むことができるすべての人を疑ってください。はい、書き換えが発生した直後ではなく、次のメモリ割り当て/割り当て解除で実行される次のヒープチェックでヒープ破損が発生します。ただし、シングル スレッド アプリケーションではコール スタックで単純に追跡する必要があります。

于 2012-05-30T19:37:09.140 に答える
0

私たちの場合、プログラムは DEBUG モードでは完全に機能し、RELEASE モードでは同様のエラー トレースでクラッシュしました。

私の場合、RELEASE モードではリンカ定義に msvscrtd.dll が含まれていました。私たちはそれを削除し、問題は解決しました。

または、リンカ コマンド ライン引数に /NODEFAULTLIB を追加することでも問題が解決しました。

于 2020-10-30T18:09:04.930 に答える