当我们这样使用数组和指针时:
int *g() {
int arr[] = {1, 2, 3};
return arr;
}
int f() {
int *value = g();
for (size_t i = 0; i < 3; i++) {
std::cout << value[i] << " ";
}
std::cout << std::endl;
}
int main(int argc, const char **argv) {
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
函数 g 返回后,它从堆栈中删除,因此我们在函数 f() 中得到段错误
但使用std::vector相同的逻辑没有任何问题:
std::vector<int> g() {
std::vector<int> arr = {1, 2, 3};
return arr;
}
int f() {
std::vector<int> value = g();
for …Run Code Online (Sandbox Code Playgroud)