我有以下代码:

using namespace std;
vector<string*> v;
{
  string s = "hello";
  v.push_back(&s);
}
{
  string ss = "goodbye";
  v.push_back(&ss);
}

cout << v.at(0)->c_str() << endl;
cout << v.at(1)->c_str() << endl;

哪个打印
goodbye
goodbye

如果删除范围括号,则将打印代码
hello
goodbye

当我离开第一个作用域时,指向第一个字符串的指针现在指向第二个作用域究竟会发生什么?

最佳答案

存储的指针在作用域之后变成了悬空的指针,任何尝试读取它们指向的内容的尝试都会产生未定义的行为。

07-28 06:46