可能重复:
Returning the address of local or temporary variable
Can a local variable's memory be accessed outside its scope?返回指向本地函数变量
我知道我不应该返回指针的本地函数变量(局部堆栈变量),因为当函数返回,变量将是无效的,堆栈将被清除,除非我使这些变量为静态或将它们分配在堆上。
下面的代码表明:
const char* v1() {
return "ABC";
}
const char* v2() {
string s = "DEF";
return s.c_str();
}
const char* v3() {
static string s = "JHI";
return s.c_str();
}
cout << v1() << endl; // Output: ABC
cout << v2() << endl; // Output: garbage (♀ ╠╠╠╠╠╠╠╠)
cout << v3() << endl; // Output: JHI
然而,我返回的指针到原始的本地函数变量,我能得到它的价值,虽然它不是一成不变的,如下面的代码所示:
int i1() {
int i = 5;
return i;
}
int* i2() {
int i = 6;
return &i;
}
int* i3() {
static int i = 7;
return &i;
}
cout << i1() << endl; // Output: 5
cout << *i2() << endl; // Output: 6 !!
cout << *i3() << endl; // Output: 7
编译器只给我警告我是返回本地变量或临时地址(Visual C++ 2008)。这种行为对于所有编译器是否共同以及编译器如何允许我使用指向本地函数变量的指针来访问它指向的值,尽管当函数返回时该变量是无效的?
它的值恰好在相同位置的内存中。这个工作的事实是一个意外,或者是在“调试”模式下编译的结果。我不确定问题是什么 - 你已经知道你不应该这样做。听你的编译器发出的警告! – 2012-01-03 06:42:41