社区
C++ 语言
帖子详情
全局变量莫名奇妙值改变
modestwolf
2008-08-01 06:39:40
定义了一个静态的变量,结果在某个时候其值变化掉了。
我在每个给这个变量赋值的地方都设置了断点,并没有执行这些语句。
大家可有碰到这种情况,可能是什么原因。
程序由于需要,分配了一个1g的内存,同时定义了很多数组,
会不会是这个变量的地址被别的地方用到了,所以值变了。
...全文
445
23
打赏
收藏
全局变量莫名奇妙值改变
定义了一个静态的变量,结果在某个时候其值变化掉了。 我在每个给这个变量赋值的地方都设置了断点,并没有执行这些语句。 大家可有碰到这种情况,可能是什么原因。 程序由于需要,分配了一个1g的内存,同时定义了很多数组, 会不会是这个变量的地址被别的地方用到了,所以值变了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
talaolaode
2008-08-05
打赏
举报
回复
加上volatile试试,不从寄存器取值,每次都从内存取值。
moonwrong
2008-08-05
打赏
举报
回复
[Quote=引用 4 楼 k2eats 的回复:]
你这个值是要不被改变吗?那就设为const
[/Quote]
好习惯
hityct1
2008-08-05
打赏
举报
回复
分配了一个1g的内存?也许不会成功。贴代码看看。
华亭真人
2008-08-05
打赏
举报
回复
程序由于需要,分配了一个1g的内存,同时定义了很多数组,
。。。这是一个什么样的程序,我很想瞻仰一下!
brookmill
2008-08-04
打赏
举报
回复
[Quote=引用 16 楼 modestwolf 的回复:]
那vs2005怎么设置在更改某个地址的值的时候停下来?
[/Quote]
Debug -- New Breakpoint -- New Data Breakpoint
iBug168
2008-08-02
打赏
举报
回复
有没有代码...
稍微贴点出来看看.................
guzhilei1986
2008-08-02
打赏
举报
回复
调试一下,看看在哪一句话的时候全局变量改变了
modestwolf
2008-08-02
打赏
举报
回复
值当然是要改变的,只是它在我不想改变的时候变了,而且这之间我没有赋值。
代码分散在多个文件当中,中间执行的语句也很多,我没办法全部贴上来,
看了楼上许多,觉得内存泄露比较可能,等跟踪看看
那vs2005怎么设置在更改某个地址的值的时候停下来?
mybabyanddear
2008-08-02
打赏
举报
回复
[Quote=引用 4 楼 k2eats 的回复:]
你这个值是要不被改变吗?那就设为const
[/Quote]
越界错误的话,const是没用的
把这个全局变量的声明位置向前移动来做调试吧,有可能是其前面的某些数组越界了
fuzhufang
2008-08-02
打赏
举报
回复
问题表述得模糊,想要大家帮忙,把代码拿出来.
brookmill
2008-08-01
打赏
举报
回复
[Quote=引用 2 楼 boxban 的回复:]
可能是内存操作越界引起的。
如果是VC,可以考虑设置数据断点,抓出越界操作的元凶
[/Quote]
一般的调试工具都可以设置数据断点,这是个好办法
brookmill
2008-08-01
打赏
举报
回复
如果是数组越界或者野指针引起的,声明成const也防止不了
e_sharp
2008-08-01
打赏
举报
回复
问题说的太模糊了
thirdapple
2008-08-01
打赏
举报
回复
在申明这个const之前声明一段空的数组,然后检查是否改变了,如果那段数组改变了,应该就是内存溢出问题。
wjb_yd
2008-08-01
打赏
举报
回复
有可能不小心访问到它的内存了吧,拿指针误该内存内容
arong1234
2008-08-01
打赏
举报
回复
系统不可能保证的,这个需要自己编程小心,正确的访问内存,不要犯错误。
这不一定是指针带来的后果,下面的例子可以给你一个不用指针导致的结果
定义三个全局变量
char buffer1[10];
int a;
char buffer2[10]
然后执行下面代码看看
a = 1;
strcp(buffer1, "abcdeabcdeabcde");
strcp(buffer2, "abcdeabcdeabcde");
看看这时a等于多少
[Quote=引用 3 楼 modestwolf 的回复:]
我想也是有这种可能,但是不知道如何让系统保证不会有这种情况出现,是不是指针带来的后果???
工作主要是verilog,c一些基础的东西都忘记了,人生充满了无奈。。。
[/Quote]
JIGSONG
2008-08-01
打赏
举报
回复
还是改为容器去用吧...
[Quote=引用楼主 modestwolf 的帖子:]
定义了一个静态的变量,结果在某个时候其值变化掉了。
我在每个给这个变量赋值的地方都设置了断点,并没有执行这些语句。
大家可有碰到这种情况,可能是什么原因。
程序由于需要,分配了一个1g的内存,同时定义了很多数组,
会不会是这个变量的地址被别的地方用到了,所以值变了。
[/Quote]
wangdeqie
2008-08-01
打赏
举报
回复
加上const 禁止修改其值!还有问题,就贴代码
junsky2006
2008-08-01
打赏
举报
回复
帮帮忙,顶
K行天下
2008-08-01
打赏
举报
回复
你这个值是要不被改变吗?那就设为const
加载更多回复(3)
全局变量
的
值
无缘无故被
改变
假如发现
全局变量
的
值
无缘无故被
改变
,那么就在
全局变量
前面加上volatile 转载于:https://www.cnblogs.com/51mcu/archive/2012/09/25/2702983.html
C语言
全局变量
被
莫名
修改,在中断程序里修改
全局变量
的童鞋注意啦-C中的volatile作用...
一个定义为volatile的变量是说这变量可能会被意想不到地
改变
,这样,编译器就不会去假设这个变量的
值
了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的
值
,而不是使用保存在寄存器里的...
全局变量
被修改的bug与原因
全局变量
值
被无故修改的原因
变量的
值
莫名
其妙的变化
今天在调试程序的时候,发现一个变量的
值
莫名
奇妙
的发生
改变
一直很郁闷。经过检查代码,发现时这个变量附近的一个数组越界引起的代码如下:定义文件int m_nCombination[7][5]; int m_nPDorder,m_nUltraorder; //...
C语言调试中出现的一些
莫名
其妙的问题
定义一个
全局变量
static uint8_t ...定义一个
全局变量
service_port,并附初
值
,在使用时总是
莫名
奇妙
的变化成另一个
值
,其他地方没有任何的修改,原因没找到,但是在定义前加上const关键字修饰即可解决该问题。
C++ 语言
64,644
社区成员
250,475
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章