当我使用mingw编译器从Windows上的CodeBlocks运行以下C++代码时,一切都很好。但是,当我在Mac OS X上运行它时,它不起作用:

void func (vector<int> &v1, vector<vector< int *> > &v2);

int main()
{
    vector<int> v1;
    v1.push_back(0);
    vector<vector <int *> > v2;
    vector<int *> vTemp;
    int x = 0;
    int * ptr = &x;
    vTemp.push_back(ptr);
    v2.push_back(vTemp);

    func(v1,v2);
    cout<<*(v2[0][1])<<endl;

    return 0;
}
void func (vector<int> &v1, vector<vector< int *> > &v2)
{
    v1.push_back(1);
    int *ptr = &(v1[1]);
    v2[0].push_back(ptr);
    cout<<*(v2[0][1])<<endl;
    v1.push_back(2);
    int *ptr2 = &(v1[2]);
    v2[0].push_back(ptr2);
    v1.push_back(3);
    int *ptr3 = &(v1[3]);
    v2[0].push_back(ptr3);
}

我期望的输出(并在Windows上获得)是
1
1

但是在Mac上,我得到了
1
0

有谁知道为什么会这样?

最佳答案

您的程序无效,并且您看到未定义的行为。您的指针值包含一个 vector 元素的地址,该字符在vector调整大小后可能无效。

在启用了GuardMalloc的情况下运行程序可以帮助您解决这一问题。

关于c++ - 在Xcode中传递指针时出错,但在Windows的Codeblock中有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8957487/

10-12 00:09
查看更多