0
我正在將代碼從RHEL5移植到RHEL6。雖然我不同意這樣做,但我很好奇爲什麼解引用const var並嘗試更新它會導致RHEL6(g ++ 4.4)中的段錯誤而不是RHEL5。g ++ 4.4取消引用const var seg的錯誤更改
程序不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的段錯誤,分段故障。 (*((double *)& kPi))= 2.0 * acos(0.0);在這個例子中,主函數argc = 1,argv = 0x7fffffffd9b8 0x0500000040068e在helloconst.cpp中: 0x000000000040068e 缺少單獨debuginfos,使用:debuginfo軟安裝的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 )