当我使用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/