[英]Static variables in C not initialized to zero
我正在为一家公司做一个大型的C项目。
我已经意识到在编译的可执行文件中有些时候,C文件中使用的静态变量没有初始化为零并且在它们中有一些值。 但是当我稍微编辑代码时,比如在项目的任何位置添加print语句,问题就解决了。
我正在使用Broadcom STB mips交叉编译工具链来编译代码。
该程序在运行Linux 3.1.3的Broadcom 97241芯片组上运行。
[编辑]我尝试了一个干净的构建,但问题并没有消失。
C标准要求必须在程序开始时初始化static
变量。 如果你没有初始化它们,那么编译器会将它们初始化为0.因此,如果你使用的是普通的编译器,那么如果你没有显式地初始化它们,那么所有的static
变量都被初始化为0。 如果出现以下问题:
1)您的一些代码将值设置为静态变量。
2)编译器不是C
编译器。
3)你的程序损坏了内存,然后你就不能依赖于printf()
等的断言
无论如何。 尝试显式地将静态变量初始化为0。 (削减2分)。 并希望有一种方法来调试您的应用程序。 调试器在这些问题中更有用,然后在这里提出这样的抽象问题。
如前所述,编译器将静态变量设置为0。 如果你看到一些不同的行为,那么你的代码最可能在某个地方破坏它(即数组溢出或类似)。
为了跟踪这个问题,你应该在main
上设置一个断点并验证变量是否确实为0.如果不是,那将是一个编译器错误。
如果变量为0,则在其上设置内存访问断点,您应该看到它在哪里破坏它。
如果没有看到代码,那么在这里提问真的没有用,因为任何答案都只是猜测,所以我们只能提供通用的答案。
声明为static的变量应该初始化为0,因为bss应该在启动时初始化为0。
添加printf语句并使问题消失听起来可能是内存损坏问题。 您是否正在访问数组越界,溢出堆栈等?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.