【发布时间】:2015-10-19 03:22:39
【问题描述】:
这是一样的吗?
1.
int* f() {
int x = 5;
return &x;
}
2.
int* f() {
int x = 5;
int* pX = &x;
return pX;
}
g++ 只返回 1. 的警告,为什么不返回 2.?
【问题讨论】:
-
它们略有不同,在第一个示例中,
x将在函数返回时被销毁。在第二种情况下,x的地址已经存储在pX中,所以x的销毁不会删除pX中存储的值,你可以像一个简单的整数值一样返回。 -
@Alparslan:所以 pX 将 x 保留在堆栈中?
-
不,它不会强制将 X 保留在堆栈中,但它只是将 X 的旧地址保存为单独的整数,即使在 X 被销毁后您也可以返回它。
-
@Alparslan:所以 2. 仍然具有与 1 相同的内存含义。?也就是有没有可能 2. 指针指向不一致的值?
-
没错,在这两种情况下,返回的内存地址都是无效的。如果你在这两种情况下都尝试在返回的地址上写,你可能会崩溃你的程序。
标签: c++ pointers g++ compiler-warnings