在 return 语句中取消引用的指针会发生什么?

问题描述 投票:0回答:3

这是一个与作业相关的问题。这不是作业本身,我已经完成了。

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

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 或删除指针,这是否会导致内存泄漏?

c++ pointers return
3个回答
4
投票

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

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
只是返回值的名称,并为此生成有效的代码。 (NRVO,命名返回值优化)


1
投票

如果您需要准确解决这个问题,那么就这样做

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

如果这只是一个示例并且您需要使用指针,则返回一个指针。您可以将其包裹在

std::shared_ptr
中以防止手动内存控制。


1
投票

会漏吗?

当然,它确实会泄漏。

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

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

return 0.0;

double foo = 0.0;
return foo;

© www.soinside.com 2019 - 2024. All rights reserved.