这是一个与作业相关的问题。这不是作业本身,我已经完成了。
这是函数的一部分(我认为唯一相关的部分)。
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 或删除指针,这是否会导致内存泄漏?
假设指针部分是固定的,就可以这样做。
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,命名返回值优化)
如果您需要准确解决这个问题,那么就这样做
double mean(double* pD, int* sz) {
double mean = 0.0;
return mean;
}
如果这只是一个示例并且您需要使用指针,则返回一个指针。您可以将其包裹在
std::shared_ptr
中以防止手动内存控制。
会漏吗?
当然,它确实会泄漏。
如何处理return语句中的内存泄漏
我无法想象像这样构建代码是有效的场景 - 只是不要这样做。为什么不只是
return 0.0;
或
double foo = 0.0;
return foo;
?