0

Windows C++ プログラムの動作がかつてないほど悪化しています。通常、関数が何かを返すとき/直後に、自然にクラッシュします。示された障害モジュールは、プログラム自体である場合もあれば、ntdll.dll である場合もあり、StackHash_something である場合もあり、例外コードがアクセス違反である場合もあり、40000015 である場合もあります。このクラッシュは、特定の変数に値を代入した直後に 1 回発生し、その代入を行った行にコメントを付けると発生しなくなります (他の場所で発生します...)。

それでも問題を追跡できません...ヒントはありますか?

私が言ったことを例証するために、私の実際のプログラムからのコードの一部(非常に役立つとは思えませんが):

void Propozitie::AdaugaConstructieIncidenta(wstring text)
{
// Some function that creates/updates a member in a "Propozitie" object
// constr_incidenta is Entitate*, member of "Propozitie"
// p is a wstring, member of object "Entitate"
delete constr_incidenta;
constr_incidenta = new Entitate;
constr_incidenta->p = text;
// ^ app crashes here.
//had it been constr_incidenta->p = L""; it wouldn't have crashed
}

更新: Windows、GCC、およびすべてを再インストールしました。同じ説明のつかないエラーが発生します。おそらくヒントは、プログラムが途中でいくつかのオブジェクトを作成する再帰関数のセットを実行した直後に割り当てが行われることでしょう...? 私は絶望的です。

4

3 に答える 3

0

私は自分のプロジェクトで同じ問題を抱えていました。最終的には循環関数呼び出しでした。再帰で、誤って循環呼び出しを行ったり、呼び出しスタックをオーバーフローさせたりしないようにしてください。

コメントを残したかったのですが、十分な担当者がいません。

于 2014-09-10T07:55:46.693 に答える
0

Enticate には既定のコンストラクターがありますか? そうしないと、「new Enticate」を呼び出したときに初期化されません。

于 2012-07-24T16:32:23.903 に答える
0

すべてのコードを再評価する必要があるようです。これは大規模なコード ベースであり、ここに投稿することはできませんが、通常、初期化されたメモリの範囲外で書き込みや読み取りを行っているためにメモリが破損し始めると、この種のエラーが発生します。

于 2012-07-24T16:05:18.210 に答える