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

时间:2013-05-05 08:14:35

标签: c++ pointers return

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

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

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或删除指针?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  

泄漏了吗?

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

  

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

我无法想象这样一种情况,即构建这样的代码是有效的 - 只需不要这样做。为什么不呢

return 0.0;

double foo = 0.0;
return foo;

答案 2 :(得分:1)

如果你需要解决这个问题而不是像这样做

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

如果这只是一个例子,你需要使用指针,那么返回一个指针。您可以将其包装在std::shared_ptr中以防止手动内存控制。