调试C程序时在count=2赋值行设断点,count为何显示为1?
#include<stdio.h> int main(void) { int mark , total ,count ; count = 2 ; total = 0 ; while (count <= 10) { printf("Enter mark : "); scanf("%d",&mark); total = total + mark ; ++ count ; } printf("Total : %.2f\n",total/10.0); return 0 ; }
现象产生原因
- 调试断点的触发时机问题:主流调试器的行断点默认会在对应代码行的指令执行前触发,你将断点打在
count = 2;所在行时,程序停住后这行赋值代码还未运行,count还没有被赋值为2。 - 局部自动变量的取值规则:代码中的
count是函数内定义的未初始化自动变量,C语言标准规定这类变量的初始值是内存空间的残留数据,本身是不确定的。你每次调试都看到值为1,仅为当前运行环境下该内存地址的残留值刚好固定为1,更换运行环境可能出现其他随机值。 - 编译优化也可能导致该问题:如果编译时开启了优化选项,可能出现调试信息与实际执行逻辑不匹配的情况,关闭所有编译优化后重新编译调试即可排除这类干扰。
验证方式:断点停住后单步执行一行,待count = 2;执行完成后再查看count值,就会显示为预期的2。
内容的提问来源于stack exchange,提问作者Pamitha
相关产品推荐
相关产品推荐

