ポインタを使って定数の値を変更したかったのです。なぜローカルconst変数をポインタキャストで変更できますか?Cでグローバルconst変数を変更できないのはなぜですか?
定数の値が変更された期待されるように、次のコード
int main()
{
const int const_val = 10;
int *ptr_to_const = &const_val;
printf("Value of constant is %d",const_val);
*ptr_to_const = 20;
printf("Value of constant is %d",const_val);
return 0;
}
を考えます。
グローバルな定数で同じコードを試したところ、次の実行時エラーが発生しています。 Windowsクラッシュレポーターが開かれています。この文で最初のprintf文を印刷した後、実行可能ファイルが停止しています。 "* ptr_to_const = 20;"
は
const int const_val = 10;
int main()
{
int *ptr_to_const = &const_val;
printf("Value of constant is %d",const_val);
*ptr_to_const = 20;
printf("Value of constant is %d",const_val);
return 0;
}
このプログラムは、コードブロックのIDEとmingwの環境でコンパイルされた次のコードを考えてみましょう。
誰でも何が起こっているのか説明できますか?
エラーはどうなりますか? – Robert
Dup:http://stackoverflow.com/questions/712334/does-the-evil-cast-get-trumped-by-the-evil-compiler(これ以上の回答は、読み込み専用メモリの代わりに何が起こるかを説明しています読み取り/書き込みスタックの) – ephemient
Windowsクラッシュレポーターが開かれています。実行可能ファイルは、最初のprintfステートメントを印刷した後に停止しています – udpsunil