c中全局变量的值无缘无故被改变了

跑步_跑步 2013-05-09 11:34:47
我有一个全局变量int IDIndex[32],其中两个赋过一次值IDIndex[0]=1,IDIndex[1]=2,第一次打印出IDIndex[0]=1,IDIndex[1]=2,第二次打印就变成IDIndex[0]=808333373,IDIndex[1]=808464432,这是什么原因呢?
...全文
5992 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
banks0913 2013-05-28
  • 打赏
  • 举报
回复 2
这个我也遇到过,仔细检查这个函数中其他的变量,是否对其中某个变量或者buff拷贝数据越界,导致你这个变量的内容被覆盖掉了.
绯红女王 2013-05-24
  • 打赏
  • 举报
回复
试试设置静态的····
袁保康 2013-05-24
  • 打赏
  • 举报
回复 1
先这个const int IDIndex[32]; 看是不是你自己改了。 再按照如果编译能过说明,你没有改。就按照赵老师的方法,设置条件断点。
赵4老师 2013-05-24
  • 打赏
  • 举报
回复
To set a breakpoint when a variable changes value 1. From the Edit menu, click Breakpoints. 2. Click the Data tab of the Breakpoints dialog box. 3. In the Expression text box, type the name of the variable. 4. Click OK to set the breakpoint.
金刚葫芦娃 2013-05-24
  • 打赏
  • 举报
回复
数组越界了..
乀Lan 2013-05-24
  • 打赏
  • 举报
回复
用volatile修饰试试呢,.
跑步_跑步 2013-05-20
  • 打赏
  • 举报
回复
1、调用IDIndex的流程大概是这样的:这个全局变量IDIndex[]是定义在一个非主程序文件file.c中的,主程序执行一个新线程new_thread,new_thread调用file.c中的一个方法,给IDIndex赋值,之后不再执行这个file.c文件的任何方法。然后该线程在另一个can.c文件中调用IDIndex的值。 2、当主线程同时要处理大量socket数据的时候,new_thread线程调用IDIndex,这时这个数组的值就变成了类似地址的值(也许就是地址值);如果屏蔽掉主线程的socket数据,new_thread线程调用IDIndex没有任何问题; 3、但是,当我把这个全局变量IDIndex[]定义到主程序文件main.c中时,无论主线程是否处理socket数据,new_thread线程调用IDIndex都不会有任何问题。 这种现象不知道是怎么造成的,难道是新线程中定义的全局变量作用时间比较短吗?容易被别的文件改变值? ps:不知道我表达的清楚不,望各位看官谅解吧。。。
zhaozilan_ly 2013-05-15
  • 打赏
  • 举报
回复 1
引用 1 楼 chuachua66 的回复:
越界,仔细查代码吧。
lstok2009 2013-05-14
  • 打赏
  • 举报
回复
b 【function】 if IDIndex[0]=808333373 ?
折翼断JJ 2013-05-13
  • 打赏
  • 举报
回复
声明为const。
wizard_tiger 2013-05-13
  • 打赏
  • 举报
回复
设断点调试吧!
startservice 2013-05-13
  • 打赏
  • 举报
回复
设个数据断点可以
lm_whales 2013-05-13
  • 打赏
  • 举报
回复
其他代码修改了全局变量,可能是代码修改的,也可能是程序出错修改了数值, 如果是前者,直接检查代码,如果是后者,查查越界访问,和堆栈,堆有没有出错。
hugett 2013-05-09
  • 打赏
  • 举报
回复
这样很难看出问题的。。你可以自己设几个断点调试一下。。
跑步_跑步 2013-05-09
  • 打赏
  • 举报
回复
引用 3 楼 N_sev7 的回复:
上代码~~~~~~~~
代码比较长,而且调用的地方比较多,不好贴出完整的。但是很确定是在一个文件中赋值一次后,在另一个文件中反复调用 在file.c文件中定义的,在这个文件中赋值 for(r=0;r<AllParanum;r++) { IDIndex[r]=id_index[r]; printf("IDIndex[%d]=%d\n",r,IDIndex[r]); } 然后再canrecycle.c文件中反复调用 printf("*********IDIndex[0]=%d,IDIndex[1]=%d,IDIndex[2]=%d\n",IDIndex[0],IDIndex[1],IDIndex[2]); 在调用的过程中有执行其他函数,有局部变量的生成与销毁
N_Sev7 2013-05-09
  • 打赏
  • 举报
回复
上代码~~~~~~~~
starytx 2013-05-09
  • 打赏
  • 举报
回复
贴点代码看看
chuachua66 2013-05-09
  • 打赏
  • 举报
回复 2
越界,仔细查代码吧。
sophy520eangel 2013-05-09
  • 打赏
  • 举报
回复
话说这点代码真的看不出来问题 id_index[X] 给你的全局变量赋值了,如果只有这一处更改变量值得话,可以直接debug跟踪下id_index
ForestDB 2013-05-09
  • 打赏
  • 举报
回复
设write断点。
加载更多回复(5)
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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