2017-02-08 7 views
1

大きなバグの問題を一見簡単なものに絞りました。ポインタへの値の割り当てハードフォールトへのリード

uint8_t *vald; 
*vald=46; 

コードのこの連句は(アトメルメーカー、GCC)

私のプラットフォーム上のハード障害につながる私が間違って何をしているのですか?

+2

メモリを割り当てていません。 – Anty

+3

"値をポインタに割り当てる"ではありません。ポインターが*指していると思われる 'uint8_t'位置に値を代入しようとしています。しかし、実際にはどこにでも向いていません。ポインタは初期化されていません。 – AnT

答えて

1

valdは初期化されていません。これは、コンパイラがローカル変数のスタックフレームをクリアするかどうかによって、ゼロまたは未定義のいずれかであることを意味します。アドレスゼロへの書き込みは常にエラーであり、未定義アドレスへの書き込みはほとんど常にエラーです。

*((uint8_t*)0) = 46; 
関連する問題