0

作業している比較的大きなクラスがあり、これまでのところすべて正常に機能しています(注:実際にはクラスを作成していません。いくつかの機能を追加しているだけです)。ただし、ヘッダーファイルでもう1つの文字列を宣言した後、すべてがクラッシュするようになりました(メモリアクセスエラーが発生します)。その文字列を消去して再構築すると、すべてが正常に機能します。

私は実際にはその文字列で何もしていません....それを宣言するだけで、奇妙なメモリエラーが発生します。

すべての機能を説明しようとすると無駄になるので、これ以上詳しく説明することはできません。問題を見つけるために、ここでどのようなことを探す必要がありますか?この奇妙な動作の原因は何ですか?

エラー自体は次のとおりです。
Unhandled exception at 0x65fd17fd (msvcp80d.dll) in myFile.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.

基本的に、.hファイルで変更されたのは次のとおりです。

StringType string1;

になって:

StringType string1;
StringType string2;

StringTypeはbasic_stringの拡張です

4

1 に答える 1

5

ヒープにメモリを割り当てましたが、初期化に失敗しました。

0xcdは、デバッグヒープで使用される塗りつぶしパターンです。動的に割り当てられたメモリがプログラムに渡される前に、初期化されていない変数を見つけるのに役立つパターンで塗りつぶされます。

クラス定義の変更が結果に影響を与える理由については、誤ったポインタ演算を行っているか、動的に割り当てられたオブジェクトの終わりを超えて何かにアクセスしている可能性があります。物体。一部のソースが古い定義を使用して構築され、一部のソースが新しい定義を使用して構築されている場合は、単一定義規則に違反している可能性もあります。

この種の問題を引き起こす可能性のあるものはたくさんあります。最善の策は、発生時にデバッガーを中断し、エラーが発生した場所を確認するために逆方向にトレースすることです(これは非常に楽しい場合があります。初期化されていない変数をトレースする必要がありました)ネットワーク接続を介して1回)。

于 2011-07-20T18:14:58.743 に答える