Tôi có đoạn mã sau:phạm vi và C++ con trỏ
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;
mà in
goodbye
goodbye
nếu tôi loại bỏ các phạm vi dấu ngoặc đơn mã sẽ in
hello
goodbye
Chính xác những gì sẽ xảy ra khi Tôi rời khỏi phạm vi đầu tiên, mà con trỏ đến chuỗi đầu tiên bây giờ trỏ đến một thứ hai?
UB, Luke! Đây chỉ là UB. Bạn đã may mắn rằng máy tính của bạn không phát nổ. –
Tôi có thể giới thiệu cho bạn câu trả lời nổi tiếng hiện tại cho câu hỏi này: http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope – Benj
Yup, [crossing các luồng] (http://en.wikipedia.org/wiki/Proton_pack#Crossing_the_Streams) một lần nữa. –