请问某个未被调用的变量的值为什么改变了

萌新萌新萌 2018-02-06 10:06:59

即函数htoi中a的值出了问题,但是不知道为什么。
(鄙人萌新一只,此程序是咱为《C程序设计语言》练习2-3所写的。)
...全文
450 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-02-08
  • 打赏
  • 举报
回复
Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
赵4老师 2018-02-08
  • 打赏
  • 举报
回复
引用 10 楼 qq_39916303 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] 都告诉你了,学会使用数据断点。
很抱歉我还是不会, 输入f11好像没有反应。。上网搜了搜也只能搜到几个其中的函数。[/quote] 在调用函数htoi之前的某一句设置断点,按F5运行,停在断点后,选菜单调试、新建断点、新建数据断点,地址:&a,字节计数:4,确定。再按F5,会自动停在改变a变量值的C/C++语句或汇编指令处。 如果看不懂汇编指令,按Alt+7显示Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
萌新萌新萌 2018-02-08
  • 打赏
  • 举报
回复
引用 8 楼 cfjtaishan 的回复:
[quote=引用 6 楼 qq_39916303 的回复:] [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 qq_39916303 的回复:] 好吧,为什么是从2编程了0
你的a在for循环里,前2次都是2,但是第三次变成0,可能是第第二次进入switch后的修改了a的值,建议在switch后面打印一下a并且和上面的a在打印部分做区分[/quote] 已经试过了,是在进入switch时a的值突然变成0(就算将循环改为没有对a赋值也是如此),但是我并没有对a进行其他的赋值,请问这是什么情况?[/quote] 这个0是第几次循环产生的,别忘了a的值可能是上次循环进入case里被修改了。如果第一次进入case前就被修改了,这个是问题(估计不会存在),很明显这个0是上次进入case中被修改了。因为第一次循环还是2,肯定是接下的循环(变为0的上次循环)进入case中导致的。 代码建议不要截图,而是直接贴出来。测试用例可以考虑截图[/quote] 十分感谢
萌新萌新萌 2018-02-08
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
都告诉你了,学会使用数据断点。
很抱歉我还是不会, 输入f11好像没有反应。。上网搜了搜也只能搜到几个其中的函数。
萌新萌新萌 2018-02-08
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt
十分感谢
自信男孩 2018-02-07
  • 打赏
  • 举报
回复
引用 4 楼 qq_39916303 的回复:
好吧,为什么是从2编程了0
你的a在for循环里,前2次都是2,但是第三次变成0,可能是第第二次进入switch后的修改了a的值,建议在switch后面打印一下a并且和上面的a在打印部分做区分
萌新萌新萌 2018-02-07
  • 打赏
  • 举报
回复
好吧,为什么是从2编程了0
萌新萌新萌 2018-02-07
  • 打赏
  • 举报
回复
很抱歉,没说明白。 请问在没有被switch语句赋值之前,a的值为什么从-2变成了0?
赵4老师 2018-02-07
  • 打赏
  • 举报
回复
学会使用数据断点。参考下面:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
自信男孩 2018-02-07
  • 打赏
  • 举报
回复
a的值没被改变吗?switch case中的a怎么被赋值了?
自信男孩 2018-02-07
  • 打赏
  • 举报
回复
引用 6 楼 qq_39916303 的回复:
[quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 qq_39916303 的回复:] 好吧,为什么是从2编程了0
你的a在for循环里,前2次都是2,但是第三次变成0,可能是第第二次进入switch后的修改了a的值,建议在switch后面打印一下a并且和上面的a在打印部分做区分[/quote] 已经试过了,是在进入switch时a的值突然变成0(就算将循环改为没有对a赋值也是如此),但是我并没有对a进行其他的赋值,请问这是什么情况?[/quote] 这个0是第几次循环产生的,别忘了a的值可能是上次循环进入case里被修改了。如果第一次进入case前就被修改了,这个是问题(估计不会存在),很明显这个0是上次进入case中被修改了。因为第一次循环还是2,肯定是接下的循环(变为0的上次循环)进入case中导致的。 代码建议不要截图,而是直接贴出来。测试用例可以考虑截图
赵4老师 2018-02-07
  • 打赏
  • 举报
回复
都告诉你了,学会使用数据断点。
萌新萌新萌 2018-02-07
  • 打赏
  • 举报
回复
引用 5 楼 cfjtaishan 的回复:
[quote=引用 4 楼 qq_39916303 的回复:] 好吧,为什么是从2编程了0
你的a在for循环里,前2次都是2,但是第三次变成0,可能是第第二次进入switch后的修改了a的值,建议在switch后面打印一下a并且和上面的a在打印部分做区分[/quote] 已经试过了,是在进入switch时a的值突然变成0(就算将循环改为没有对a赋值也是如此),但是我并没有对a进行其他的赋值,请问这是什么情况?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧