我正在为一家公司开发一个大型 C 项目。
我意识到,有时在编译后的可执行文件中,C 文件中使用的静态变量没有初始化为零,并且其中有一些值。 但是,当我对代码进行一些编辑(例如在项目中的任何位置添加打印语句)时,问题就解决了。
我正在使用 Broadcom STB mips 交叉编译器工具链来编译代码。
该程序在运行 Linux 3.1.3 的 Broadcom 97241 芯片组上运行。
[编辑]我也尝试了干净的构建,但问题并没有消失。
最佳答案
C 标准要求静态变量必须在程序启动时初始化。如果您不初始化它们,那么编译器会将它们初始化为 0。因此,如果您使用普通编译器,那么如果您不显式初始化它们,则所有 static
变量都会初始化为 0。如果出现以下情况,则可能会出现此类问题:
1) 您的某些代码将值设置为静态变量。
2) 编译器不是 C
编译器。
3) 你的程序损坏了内存,然后你就不能依赖 printf()
等断言
无论如何。尝试将静态变量显式初始化为 0。 (切断2点)。并希望有一种方法可以调试您的应用程序。调试器在此类问题中更有用,然后在这里提出这样的抽象问题。
关于c - C 中的静态变量未初始化为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20418366/