【发布时间】:2021-08-11 22:28:16
【问题描述】:
我有一个 C++ 代码。
int* func(int n) {
int* v= &n;
return v;
}
int main()
{
int* c = func(5);
int* k = func(9);
cout<<*c;
}
此代码返回 9 而不是 5。 但是,当我将 func 更改为
int* func(int n) {
int* v= new int(n);
return v;
}
这会按预期返回 5。第一个不起作用但第二个起作用的原因是什么?
【问题讨论】:
-
变量
n是一个本地变量,函数返回时生命周期结束。返回一个指向它的指针是没有意义的,因为指针会立即失效。 -
您正在返回一个临时函数参数的地址。那是未定义的行为。 (即你得到的任何东西都是不可靠的。)
-
第二个变体还有另一个问题(与您当前使用该函数的方式有关):内存泄漏。你用
new分配内存,但你从来没有delete它。