2017-11-28 21 views
-2
int *a=500; 
    *a=3; 
printf("%d",*a); 

上記のコードを見てください。希望するメモリアドレスエラーを設定する

メモリの500番地を3に設定したいが、このコードをコンパイルするとエラー(セグメンテーションフォルト)が発生する。何が問題ですか?

+2

住所500?なぜ500?また、「私はエラーが発生します。 「それは働かない」と同じくらい有用です。エラーメッセージを追加してください。 – tkausl

+0

ちょうど –

+0

例えば500のように編集されています。メモリ内のいくつかの場所を設定したいと思います。なぜ私はできないのですか? –

答えて

1

あなたはOSの下でこれを実行することを意味します。 アドレス500への書き込みは、プロセスのメモリマップおよびスタック不足の可能性が非常に高いです。

幸いなことに、メモリ保護ユニットは、あなたがどこにでも書き込めるようにしていません。

3

これは無効です。

int *a=500; 

あなただけのポインタ変数に任意のアドレスを割り当て、それはどこでも便利指していることを期待することはできません。特定のデバイス用に明確に定義されたアドレスを持つ組み込みプラットフォームでは、このようなことができます。

あなただけ出変数のアドレスまたはmallocのようなメモリ割り当て関数によって返されたアドレスに割り当てることができます:あなたは、例外を得たので

int b; 
int *a = &b;     // valid 
int *c = malloc(sizeof(int)); // valid 
int *d = 500;     // not valid 
関連する問題