函数内部动态分配的内存泄漏
Memory leak with dynamic allocation inside a function
我正在在线学习c++,目前正在讨论指针和内存泄漏。
课程中告诉我们,当函数体结束时,所有局部变量都被销毁(与声明顺序相反)。
我想理解的是这个代码是否泄漏内存:
void function()
{
TestClass *p = new TestClass();
}
看起来,它确实如此,但我不确定为什么指针"p"没有被解引用到它的堆地址,一旦函数作用域退出,那里的数据就会被删除。
肯定会泄漏内存。当函数体结束时,所有局部变量都被销毁。表示在堆栈中创建的变量,而不是堆。如果在堆中分配内存,则必须在完成分配后释放内存。
另一件事是你关于解引用的概念是错误的。解引用意味着使用指针所指向的对象,而不释放指针的内存,称为Deallocation
指针本身将被销毁,因为它在堆栈中被分配,但p
指向的数据将泄漏。如果你写
TestClass tc;
TestClass *p = &tc;
则所有对象将在堆栈中创建并销毁,但使用new
强制使用堆中的内存。你必须使用delete
来释放它
new
用于在堆中为c++类对象分配内存,在分配内存后调用对象的构造函数。
必须使用delete
操作符来释放由new操作符分配的内存,否则会发生内存泄漏。
delete *p;
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏