问题描述
- 我不知道以下代码有什么问题。
- 它告诉返回的局部变量的地址。
#include <iostream>
using namespace std;
int *myfunc(int *ptrB);
int main() {
int *a,b;
cout << "give b :" << endl;
cin >> b;
a = myfunc(&b);
cout << "a is :" << *a << endl;
return 0;
}
int *myfunc(int *ptrB) {
int a;
a= (*ptrB) * (*ptrB);
*ptrB = a;
return &a;
}
解决方法
“我不知道怎么了。” -出问题的是,您返回的是函数返回后不再存在的局部变量的地址,因此该地址指向死对象并尝试使用它是UB。
,当您对函数返回的指针执行任何操作(如取消引用)(这是使用指针进行的典型操作)时,您需要知道指针所指向的对象存在。但是,您返回的指针指向存在于返回函数范围内的对象。函数返回后,函数作用域不再存在,对象随之下降。就像拿着已经被拆毁的房子的地址一样,希望您可以在那里过夜。