gpt4 book ai didi

c - 在 MSVC 2005 中执行 C 代码时出现奇怪的错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:32 25 4
gpt4 key购买 nike

我正面临以下奇怪的错误。

我在 MSVS2005 中有一个包含所有 C 代码的工作区。我在一个 C 文件中声明了一个全局变量。(file1.c) 这个文件有函数 main(),我在其中初始化该变量的值 = 0。在其他 C 文件中(file2.c)。从 main 开始,有一个函数调用(file2.c 中的 func1),它将此全局变量的值设置为 1。在 file2.c 中,我已将全局变量声明为“extern ..”并访问它。但我注意到,在主函数时刻,代码执行进入函数 func2,我在监 window 口中看到该全局变量本身的地址已更改为完全不同的地址(在监 window 口中,我正在监视 &variable)。结果,当该变量的值设置为 1 时,它会将值 1 写入完全不同的内存地址本身。因此,当稍后我使用此变量检查 if 条件(if variable == 1)时,它仍然显示 0 的值并且不满足 if 条件并且不采用该代码路径,它应该被采用那条路。

解决方法:我在我现有的全局结构之一中声明了该变量,然后访问该变量以执行相同的操作;代码按预期工作。

如果全局变量在某些 C 文件中声明为全局变量,那么对于导致全局变量地址更改的错误的解释是什么?无论我在哪个 *.c 文件中声明它以及我使用“extern”访问它,结果都是相同的全局变量地址更改和随后的错误操作。没有启用优化选项。

谢谢,

-广告

最佳答案

在没有实际看到代码的情况下只能猜测,但这里有 2 种可能性:

  1. 全局变量被 main()func2() 中的局部变量隐藏(或者可能是 func1() -问题提到 func1() 但我怀疑这是一个错字 - 这就是为什么剪切和粘贴代码非常重要);
  2. 您在 file1.c 中错误地将全局变量声明为 static 并且在 file2.c 中的 extern 声明中有一个初始值设定项。在 extern 声明上有一个初始值设定项将导致该声明也成为一个定义。

关于c - 在 MSVC 2005 中执行 C 代码时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com