我遇到了一些错误。任何线索我哪里出错了?我认为我正在应用正确的逻辑。
int* adderFunction(int a, int b)
{
int result;
int *pResult;
pResult = &result;
result = a + b;
return (pResult);
}
不,您正在尝试返回局部变量上的指针,该指针在从函数返回后被破坏。
您正在堆栈上创建一个指针,并尝试返回该指针,该指针在您完成执行代码后被删除。如果你想在堆上创建一些东西,你需要使用new
关键字。
但是,您的问题可以更简单地解决:
int adderFunction(int a, int b) {
return a + b;
}
您正在返回一个指向局部变量的指针result
。当您从函数返回时,它不再存在,但您正在返回指向它的指针。
您正在返回函数结束后超出范围的指针。这是未定义的行为。
pResults 指向一个堆栈变量。new
如果您希望在堆上分配数据,则应该使用。但你最记得稍后释放它。我更喜欢
int adderFunction(int a, int b)
{
return a+b;
}
如果要保留指针表示法,也可以这样做
void adderFunction(int a, int b,int* pResult)
{
*pResult=a+b;
}