現在、RHEL5 から RHEL6 にコードを移植しています。私はこれを行うことに同意しませんが、const var を逆参照して更新しようとすると、RHEL5 ではなく RHEL6 (g++ 4.4) でセグメンテーション違反が発生する理由に興味があります。
プログラムは const がなくても問題ありません。g++ 4.4 で const 変数が格納される場所について何が特別なのか知りたいだけです。
これがコードとセグメンテーションフォールトです
#include <math.h>
using namespace std;
const double kPi = 2.0 * acos(0.0);
int main (int argc, char ** argv) {
(*((double *)&kPi)) = 2.0 * acos(0.0);
}
プログラム受信信号 SIGSEGV、セグメンテーション違反。メインの 0x000000000040068e (argc=1, argv=0x7fffffffd9b8) at helloconst.cpp:11 11 (*((double *)&kPi)) = 2.0 * acos(0.0); 個別のデバッグ情報がありません。次を使用してください:
(gdb) bt
#0 0x000000000040068e in main (argc=1, argv=0x7fffffffd9b8) at helloconst.cpp:11
(gdb) list
6 #include <math.h>
7 using namespace std;
8
9 const double kPi = 2.0 * acos(0.0);
10 int main (int argc, char ** argv) {
11 (*((double *)&kPi)) = 2.0 * acos(0.0);
12 }
(gdb)