OSX,静态变量共享相同的地址

时间:2010-06-22 19:59:46

标签: c++ macos gcc

在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()时,第一个= 0会破坏静态textstrArgs数组中的值。

我会这样做会导致这种情况发生吗?

感谢任何人都能给予的帮助。

2 个答案:

答案 0 :(得分:1)

我怀疑他们实际上是在分享地址。我相信你更有可能是越界或类似的访问数组。

尝试打印两个变量的地址。如果您的怀疑是正确的,那将告诉您。

答案 1 :(得分:0)

只是预感 - 尝试改变:

static int textstrArgs[] = { 1, 1, 1 };

static int textstrArgs[3] = { 1, 1, 1 };

另一件事 - 您实际上是在任何地方引用textstrArgs吗?如果没有,那么它可能会被优化掉。