【发布时间】:2023-04-08 08:55:01
【问题描述】:
我想用指针改变一个常量的值。
考虑下面的代码
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 崩溃报告器正在打开。在打印此语句“*ptr_to_const = 20;”中的第一个 printf 语句后,可执行文件正在暂停
考虑下面的代码
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;
}
这个程序是在mingw环境下用codeblocks IDE编译的。
谁能解释这是怎么回事?
【问题讨论】:
-
复制:stackoverflow.com/questions/712334/…(下面的答案解释了当它在只读内存而不是读写堆栈中时会发生什么)
-
Windows 崩溃报告器正在打开。打印第一条 printf 语句后,可执行文件正在停止
-
这是我所期望的。请注意,printf() 消息并不能很好地指示崩溃发生的位置,并且调用未定义行为的程序可以做任何事情(包括您认为它应该具有的行为)。
-
为什么他可以改变本地 const 的值?
-
语句 *ptr_to_const = 20; 出现运行时错误;