0

这是一个与家庭作业有关的问题。这不是我完成的作业本身。

这是函数的一部分(我认为唯一相关的部分)。

double mean(double* pD, int* sz) {
    double *meanPtr = new double;
    *meanPtr = 0.0;
    return *meanPtr; //how to deal with a memory leak in return statement? does it leak?
}

我担心最后一点。这是否会导致内存泄漏,因为我没有指向 null 或删除指针?

4

3 回答 3

3

假设指针部分是固定的,您可以这样做。

double mean(double* pD, int* sz) {
    double *meanPtr = new double;
    *meanPtr = 0.0;
    // Code above is assumed to be a given.
    double result = *meanPtr;
    delete meanPtr
    return result;
}

现代编译器发现它result只是返回值的名称,并为此生成有效的代码。

于 2013-05-06T09:16:58.177 回答
1

它会泄漏吗?

当然,它确实会像地狱一样泄漏。

如何处理return语句中的内存泄漏

我无法想象像这样构建代码是有效的场景 - 只是不要这样做。为什么不只是

return 0.0;

或者

double foo = 0.0;
return foo;

?

于 2013-05-05T08:18:17.670 回答
1

如果您需要完全解决这个问题而不是这样做

double mean(double* pD, int* sz) {
    double mean = 0.0;
    return mean;
}

如果这只是一个示例并且您需要使用指针,则返回一个指针。您可以将其包装起来std::shared_ptr以防止手动内存控制。

于 2013-05-05T08:21:40.650 回答