param是一个自动变量.您不能将其退回并在其范围之外使用它.
param仅存在于func中,如果返回,结果为Undefined Behavior.
要修复它,您可以:
>动态地在堆上分配param.执行此操作后,您可以安全地返回参数地址,但您必须记住在不需要它时将其释放.
这是对代码的更正
#include
#include
#include
using namespace std;
void * func(int a)
{
if (a == 1)
{
int *param = new int(5);
return param;
}
else if (a == 2)
{
double *param = new double(5.5);
return param;
}
else if (a == 3)
{
char *param = new char[50];
strcpy(param, "test");
return param;
}
return nullptr;
}
int main()
{
int *ptr = (int*)func(1);
cout << *ptr << std::endl; // print the int value
delete ptr;
double *ptr2 = (double*)func(2);
cout << *ptr2 << std::endl; // print the double value
delete ptr2;
char *ptr3 = (char*)func(3);
cout << ptr3 << std::endl; // print the string
delete[] ptr3;
getchar();
return 0;
}