在这种情况下,是否有内存泄漏

Is there any memory leak in this case?

本文关键字:内存 泄漏 是否 这种情况下      更新时间:2023-10-16

这是代码,可以执行一些缓冲区操作的函数:

void DoProfile (double* profile, double* &projection, int S, int H, double T)
{
    double* p = projection;
    for (int h = 0; h < H; h++)
    {
        memcpy(p, profile, sizeof(double)*S);
        p += S;
    }
    // should p be deleted here like following?
    // delete p;
    // p = NULL;
}

我不确定,但是据我所知,只要要点不是新的,那么它最终就不需要删除了吗?有人请我教育我。谢谢。

您是对的,p不需要在函数调用结束时释放,因为您没有为此分配任何内存。因此,此功能在这方面是可以的。

当然,您需要在此功能之外正确管理profileprojection的内存。您还需要确保已经分配了足够的内存以持有所有数据,以免引起访问违规错误。

没有new,因此不需要delete。内部功能无泄漏。当然,我们不知道外面发生了什么。

btw,在C 中,我们倾向于避免原始指针(使用标准容器和智能指针),并通过函数参数突变变量(而不是使用return,请在需要时重新设计接口)。另外,我不需要在此处参考通过指针(double* &projection)。

所提供的代码中没有内存泄漏。没有堆分配,因此没有泄漏。

但是,您应该小心地使用未分配的指针复制。

我的建议是避免记忆。使用向量等

您只能在new返回的内容上调用delete。由于p是算术(重复的p += S;)的结果,它超过了连续块的开头,因此它不可能从new返回。绝对不是。