OSX,静态变量共享相同的地址
Posted
技术标签:
【中文标题】OSX,静态变量共享相同的地址【英文标题】:OSX, static variable sharing same address 【发布时间】:2010-06-22 19:59:45 【问题描述】:在 OSX 中,我有以下代码。使用 gcc 4.0.1。我是 OSX 开发的新手,所以我不确定还有哪些其他系统信息在这里有用...
static int textstrArgs[] = 1, 1, 1 ;
void func()
static int first = 1;
if (first)
first = 0;
// stuff
/* other stuff */
其中 func() 被声明为“extern”并从另一个库调用。
问题是'texstrArgs[2]'和'first'的地址是一样的。也就是说,当应用程序加载时,它会将这两个变量放在内存中的同一位置。当调用 func() 时, first = 0 正在破坏静态 textstrArgs 数组中的值。
我这样做会导致这种情况发生吗?
感谢任何人提供的任何帮助。
【问题讨论】:
如果这是真的,那就是一个错误。你试过 gcc 4.2 吗? 你能分享一下你用来测试的简单代码sn-p吗? 【参考方案1】:我怀疑他们实际上是在共享地址。我相信你更有可能访问数组越界或类似的东西。
尝试打印两个变量的地址。这会告诉你你的怀疑是否正确。
【讨论】:
【参考方案2】:只是预感 - 尝试改变:
static int textstrArgs[] = 1, 1, 1 ;
到
static int textstrArgs[3] = 1, 1, 1 ;
另一件事-您实际上是否在任何地方引用 textstrArgs ?如果不是,那么它可能正在被优化掉。
【讨论】:
好吧,你指出了这个问题。实际上使用了错误的静态变量,但每个值通常都是“1”,所以事情通常有效。没有编译器错误,只是程序员错误。以上是关于OSX,静态变量共享相同的地址的主要内容,如果未能解决你的问题,请参考以下文章