这是与家庭作业有关的问题。这不是我已经完成的作业本身。
这是函数的一部分(我认为唯一相关的部分)。
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或删除指针?
答案 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
中以防止手动内存控制。