gpt4 book ai didi

c++ - 在 Xcode 中传递指针时出错,但在 Windows 上的代码块中有效

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:58 25 4
gpt4 key购买 nike

当我使用 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 上的代码块中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957487/

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