c - C 中的静态变量未初始化为零

标签 c linux static-variables cross-compiling

我正在为一家公司开发一个大型 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/

相关文章:

c - 如何提高用 C 编写的阻塞队列的性能?

linux - Docker 容器中的尾部 : Cannot allocate memory

linux - 使用 epoll 的客户端连接

c++ - 当可执行文件派生另一个可执行文件时,不会创建 gmon.out

c++ 17:仅 header :类静态变量错误

java - 在同一类中的方法之外的任何地方访问整数

c - 如何在 C 中复制链表?

c - 如何在 lua_getfield 中使用方括号

c - 如何将焦点从 clutter_stage 转移到 clutter_actor?

PHP 对静态变量的引用