c-「アライメントトラップ」エラーとはどういう意味ですか?

私の友人の1人が、「アライメントトラップ」エラーを表示し始めたコードをデバッグしようとして大きな問題を抱えています。この問題は、特定の関数によってグローバル構造にアクセスするときに発生します。

Webでいくつかの調査を行った後、「アライメントトラップ」が何を意味するのか、または何であるのかはまだ明確ではありません。通常、アライメントトラップの原因と、問題の解決方法(デバッガーの使用方法だけでなく、問題自体)に特別な注意を払って説明してもらえますか?

これはすべて、組み込みLinuxを備えたARMプロセッサ(OMAP L138)のCコードで行われます。

注:この回答でエラー固有の解決策の提案を取得しようとはしていませんが、質問のタイトルが示すように、「アライメントトラップ」エラーの意味を理解しています。これが、ソースコードなどを入れるつもりがない理由です。

ベストアンサー
これは、オペレーティングシステムとプロセッサに固有です(およびABIにも固有です)。

memory corruptionmemory leakbuffer overflowなどがあるか、または不良ポインター(初期化されていないか、誤って計算された)を間接参照しています。 8の倍数ではないdoubleへのポインター(または、一部のアーキテクチャーでは、4の倍数ではないintへのポインター)、または何らかの無効なアドレス(たとえば、不正な関数ポインター)にジャンプしています。

Linuxでは、gcc -Wall -gを使用してコンパイルし、デバッガー(gdb)とvalgrindを使用することをお勧めします。-fsanitize= addressまたは-fsanitize = undefinedコンパイルフラグ(GCC 4.9を使用)の使用に興味があるかもしれません。両方とも、生成されたコードを計測(変更)します。

undefined behaviorについて読んでください。

転載記事の出典を記入してください: c-「アライメントトラップ」エラーとはどういう意味ですか? - コードログ