0

MSVS 2010 でプロジェクトをデバッグしようとしています。実装 - c++; ソース コードをデガブしているときに、MSVS によって次のエラーが報告されます。

報告された失敗:

"First chance exception at 0x00000013fb5b9ee in unit.exe: 0xc00000005 access voilation reading location 0x00000000000000c."

問題はアドレスの取得にあります。

int base = (*(abc::g_runc1.m_paulsenderpin.m_lastchunk_p)).xcpp::cxcppoutput::m_baseaddress;

私のプロジェクトはソースコードを含めるには非常に大きく、

つまり、次のように説明できます。 - ポールは、送信ピンが c1 に接続されたモジュールです。- xcpp はインターフェイスです

このソース コードとプロジェクトは正しく、ARM コンパイラでは問題なく動作しますが、MSVS ではアクセス違反エラーが発生します。msdn には、アセンブリによって設定されたアクセス許可に関するいくつかの投稿があり、アドレス指定された場所の読み取りを回避しています。もしそうなら、それを変更する方法...?または、問題を見つけるためのより良いオプションはありますか...?

どんな助けでも大歓迎です。

4

2 に答える 2

0

問題はメモリ アドレス指定にあります。ARM デバッガでは 32 ビット、MSVS10 では 48 ビット アドレス指定です。MSB バイトが失われ、正しいメモリ アドレスが見つからないためです...!!!

于 2013-08-21T09:15:38.403 に答える
0

あなたのコードは、実際にはそのプロセスが所有していない場所にアクセスしようとしています。これほどゼロに近いアドレスにユーザー アプリケーションのデータを配置することはできません。式が長すぎて、ゼロ参照を含むメンバーがどこにあるかを簡単に見つけることができないため、私のヒントはm_last chunk_pであり、m_baseaddressはオフセット 12 のメンバーのようです。

コードが ARM で動作するものによってコンパイルされたときに、コードが正常に動作する理由の簡単な説明が 1 つあります。 . したがって、コードのどこかでより大きなポインターまたは間違ったmemsetパラメーターを使用すると、ポインターが上書きされます。

基本型のサイズが常に同じであるとは限らないため、別のバージョンの (おそらく別の) コンパイラ (または異なるプロセッサ アーキテクチャ 32/64 の非マシン) でコンパイルすると、問題が解消される場合もあります。

式でポイントされているものが実際にゼロ (または場合によっては 12) であることを確認し、それを監視するようにしてください。sizeofどこでも適切に使用してください。

于 2013-08-16T13:11:52.473 に答える