这是代码,一个执行缓冲操作的函数:
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;
}
我不确定,但据我所知,只要不重点,那么最后不需要删除?有人请教育我。感谢。
答案 0 :(得分:5)
你是对的,在函数调用结束时不需要释放p
,因为你没有为它分配任何内存。所以这方面的功能还可以。
但当然,您需要在此功能之外正确管理profile
和projection
的内存。您还需要确保已分配足够的内存来容纳所有数据,以免造成访问冲突错误。
答案 1 :(得分:4)
没有new
,因此不需要delete
。内部功能无泄漏。当然,我们不知道外面发生了什么。
return
代替,如果需要,重新设计接口)。另外,我不需要在这里通过引用传递指针(double* &projection
)。
答案 2 :(得分:2)
提供的代码中没有内存泄漏。因此没有堆分配没有泄漏。
但是你应该小心使用未分配的指针进行复制。
我的建议是避免使用memcpy。使用矢量等
答案 3 :(得分:2)
您只能就delete
返回的内容致电new
。由于p
是算术(重复p += S;
)的结果,它使其超过连续块的开头,因此不可能从new
返回。绝对不是。