1

我遇到了一些错误。任何线索我哪里出错了?我认为我正在应用正确的逻辑。

int* adderFunction(int a, int b)
{
    int result;
    int *pResult;
    pResult = &result;
    result = a + b;
    return (pResult);
}
4

5 回答 5

9

不,您正在尝试返回局部变量上的指针,该指针在从函数返回后被破坏。

于 2013-04-19T16:03:16.260 回答
1

您正在堆栈上创建一个指针,并尝试返回该指针,该指针在您完成执行代码后被删除。如果你想在堆上创建一些东西,你需要使用new关键字。

但是,您的问题可以更简单地解决:

int adderFunction(int a, int b) {
    return a + b;
}
于 2013-04-19T16:18:26.170 回答
1

您正在返回一个指向局部变量的指针result。当您从函数返回时,它不再存在,但您正在返回指向它的指针。

于 2013-04-19T16:03:31.557 回答
0

您正在返回函数结束后超出范围的指针。这是未定义的行为

于 2013-04-19T16:08:18.087 回答
0

pResults 指向一个堆栈变量。new如果您希望在堆上分配数据,则应该使用。但你最记得稍后释放它。我更喜欢

int adderFunction(int a, int b)
{
    return a+b;
}

如果要保留指针表示法,也可以这样做

void adderFunction(int a, int b,int* pResult)
{
    *pResult=a+b;
}
于 2013-04-19T16:08:45.963 回答