【问题标题】:Static variable initialized with wrong value使用错误值初始化的静态变量
【发布时间】:2013-12-17 15:20:45
【问题描述】:

我已经定义了一个这样的函数

static void
flatten_tree(...)
{
  static int num = 0;
  ...
}

但是,当函数执行时,num 会得到一些随机值,而不是第一次运行时的 0。在随后的函数调用中,它的行为与静态 var 应该做的一样。静态变量不是用零显式初始化的吗?初始化它的正确方法是什么?

【问题讨论】:

  • 你怎么知道它没有初始化为0?你能告诉我们吗?
  • 显示更多代码。堆栈上的指针可能会覆盖这些值。
  • 编译器应该将所有静态初始化为0。它总是一个不同的随机值吗?
  • 我猜当控件在 on 该行时,当它尚未初始化时,您正在 GDB 中查看它。但实际初始化只有在你输入 next ;-) 之后才会发生
  • 根据文档,所有静态变量的初始默认值为零。如果您认为您是对的,请向我们展示代码。

标签: c static


【解决方案1】:

如果它在第一次被调用时没有设置为零,那么你的 C 实现被破坏了,你的调试器被破坏了,或者你犯了一些其他错误 - 我不会评论最有可能的情况: - )

如果您真的想看看它在做什么,请将您的代码暂时更改为:

static void
flatten_tree(...)
{
  static int num = 0;
  printf( "XYZZY DEBUG: initial num is %d\n", num);
  exit(1);

  ...
}

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2010-12-22
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多