1
大きなバグの問題を一見簡単なものに絞りました。ポインタへの値の割り当てハードフォールトへのリード
uint8_t *vald;
*vald=46;
コードのこの連句は(アトメルメーカー、GCC)
私のプラットフォーム上のハード障害につながる私が間違って何をしているのですか?
大きなバグの問題を一見簡単なものに絞りました。ポインタへの値の割り当てハードフォールトへのリード
uint8_t *vald;
*vald=46;
コードのこの連句は(アトメルメーカー、GCC)
私のプラットフォーム上のハード障害につながる私が間違って何をしているのですか?
valdは初期化されていません。これは、コンパイラがローカル変数のスタックフレームをクリアするかどうかによって、ゼロまたは未定義のいずれかであることを意味します。アドレスゼロへの書き込みは常にエラーであり、未定義アドレスへの書き込みはほとんど常にエラーです。
*((uint8_t*)0) = 46;
メモリを割り当てていません。 – Anty
"値をポインタに割り当てる"ではありません。ポインターが*指していると思われる 'uint8_t'位置に値を代入しようとしています。しかし、実際にはどこにでも向いていません。ポインタは初期化されていません。 – AnT