int *a=500;
*a=3;
printf("%d",*a);
上記のコードを見てください。希望するメモリアドレスエラーを設定する
メモリの500番地を3に設定したいが、このコードをコンパイルするとエラー(セグメンテーションフォルト)が発生する。何が問題ですか?
int *a=500;
*a=3;
printf("%d",*a);
上記のコードを見てください。希望するメモリアドレスエラーを設定する
メモリの500番地を3に設定したいが、このコードをコンパイルするとエラー(セグメンテーションフォルト)が発生する。何が問題ですか?
あなたはOSの下でこれを実行することを意味します。 アドレス500への書き込みは、プロセスのメモリマップおよびスタック不足の可能性が非常に高いです。
幸いなことに、メモリ保護ユニットは、あなたがどこにでも書き込めるようにしていません。
これは無効です。
int *a=500;
あなただけのポインタ変数に任意のアドレスを割り当て、それはどこでも便利指していることを期待することはできません。特定のデバイス用に明確に定義されたアドレスを持つ組み込みプラットフォームでは、このようなことができます。
あなただけ出変数のアドレスまたはmalloc
のようなメモリ割り当て関数によって返されたアドレスに割り当てることができます:あなたは、例外を得たので
int b;
int *a = &b; // valid
int *c = malloc(sizeof(int)); // valid
int *d = 500; // not valid
住所500?なぜ500?また、「私はエラーが発生します。 「それは働かない」と同じくらい有用です。エラーメッセージを追加してください。 – tkausl
ちょうど –
例えば500のように編集されています。メモリ内のいくつかの場所を設定したいと思います。なぜ私はできないのですか? –