【发布时间】:2018-12-11 09:54:48
【问题描述】:
我在一个定期调用的函数中声明了一个静态变量。我知道将变量声明为静态可以使其在程序生命周期内有效,而无需再次重新声明。当然,因为它是本地的,所以只能通过它的功能来修改。
奇怪的是,在调试代码时,函数执行完毕,在离开函数之前,我确定变量的值为0。在下一个函数调用中,变量的值在执行函数的任何行之前递增256。如果变量的值在离开函数之前为10,则在下一次调用时变为266。这种行为是持久的。
什么会导致局部静态变量的值在函数调用之间发生变化?
很遗憾,我无法提交重现问题的代码 sn-p。
【问题讨论】:
-
我猜你代码中的其他地方有缓冲区溢出(覆盖
warningBounce) -
我已经在一个测试程序中猛击了你的代码,它在这里工作正常,所以我支持@pmg 的建议,即某些东西正在覆盖 var。用 valgrind 检查一下。
-
@Salahuddin 我们告诉你为什么 var 可能会改变。请检查一下。由于您没有提供可重现的问题,我们只能猜测。我已将您的代码扩展为一个完整的程序,其中 getVoltage 返回一个随机变量并执行所有内容 100 次。它对我有用...
-
好的。我会努力的。谢谢
-
您显示的代码没有做任何有用的事情。
warningBounce永远不会在函数内部读取,也无法在函数外部读取。