【发布时间】:2009-03-18 12:18:50
【问题描述】:
我正面临以下古怪错误。
我在所有 C 代码的 MSVS2005 中有一个工作区。我已经在一个 C 文件中声明了一个全局变量。(file1.c)该文件具有 main() 函数,在该函数中,我将该变量的值初始化为 0。在其他 C 文件(file2.c)中。从 main 函数调用一个函数(file2.c 中的 func1),该函数将此全局变量的值设置为 1。在 file2.c 中,我将全局变量声明为“extern ..”并访问它。但我注意到的是,在代码执行进入函数 func2 的主函数时刻,我在监视窗口中看到该全局变量本身的地址已更改为完全不同的地址(在监视窗口中,我正在查看 &variable)。结果,当该变量的值设置为 1 时,它会将值 1 写入完全不同的内存地址本身。因此,当稍后我使用此变量检查 if 条件(如果变量 == 1)时,它仍然显示值 0 并且不满足 if 条件并且不采用预期采用的代码路径那条路。
解决方法: 我在现有的全局结构之一中声明了该变量,然后访问该变量以执行相同的操作;代码按预期工作。
那么,如果在某个 C 文件中将全局变量声明为全局变量,导致全局变量地址发生更改的错误的解释是什么?我在哪个 *.c 文件中声明它以及使用“extern”访问哪个文件都没有关系,结果是相同的全局变量地址更改和随后的错误操作。没有启用优化选项。
谢谢,
-AD
【问题讨论】:
-
肯定有一个小错误。请输入一些代码 sn-ps 好吗?
-
我认为如果您不尝试描述代码而是直接在此处插入重要部分,您的问题会更容易阅读。
标签: c visual-studio-2005