我目前正在将代码从 RHEL5 移植到 RHEL6。虽然我不同意这样做,但我很好奇为什么取消引用 const var 并尝试更新它会导致 RHEL6 (g++ 4.4) 而不是 RHEL5 中的段错误。
没有 const 的程序很好 我只是好奇 const 变量在 g++ 4.4 中的存储位置有什么特别之处
这是代码和段错误
#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 in main (argc=1, argv=0x7fffffffd9b8) at helloconst.cpp:11 11 (*((double *)&kPi)) = 2.0 * acos(0.0); 缺少单独的调试信息,使用:debuginfo-install glibc-2.12-1.80.el6.x86_64 libgcc-4.4.6-4.el6.x86_64 libstdc++-4.4.6-4.el6.x86_64
(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)