在这种情况下,是否有内存泄漏
Is there any memory leak in this case?
这是代码,可以执行一些缓冲区操作的函数:
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
不需要在函数调用结束时释放,因为您没有为此分配任何内存。因此,此功能在这方面是可以的。
当然,您需要在此功能之外正确管理profile
和projection
的内存。您还需要确保已经分配了足够的内存以持有所有数据,以免引起访问违规错误。
没有new
,因此不需要delete
。内部功能无泄漏。当然,我们不知道外面发生了什么。
btw,在C 中,我们倾向于避免原始指针(使用标准容器和智能指针),并通过函数参数突变变量(而不是使用return
,请在需要时重新设计接口)。另外,我不需要在此处参考通过指针(double* &projection
)。
所提供的代码中没有内存泄漏。没有堆分配,因此没有泄漏。
但是,您应该小心地使用未分配的指针复制。
我的建议是避免记忆。使用向量等
您只能在new
返回的内容上调用delete
。由于p
是算术(重复的p += S;
)的结果,它超过了连续块的开头,因此它不可能从new
返回。绝对不是。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏