函数内部动态分配的内存泄漏

Memory leak with dynamic allocation inside a function

本文关键字:内存 泄漏 动态分配 内部 函数      更新时间:2023-10-16

我正在在线学习c++,目前正在讨论指针和内存泄漏。

课程中告诉我们,当函数体结束时,所有局部变量都被销毁(与声明顺序相反)。

我想理解的是这个代码是否泄漏内存:

void function()
{
    TestClass *p = new TestClass();
}

看起来,它确实如此,但我不确定为什么指针"p"没有被解引用到它的堆地址,一旦函数作用域退出,那里的数据就会被删除。

肯定会泄漏内存。当函数体结束时,所有局部变量都被销毁。表示在堆栈中创建的变量,而不是堆。如果在堆中分配内存,则必须在完成分配后释放内存。

另一件事是你关于解引用的概念是错误的。解引用意味着使用指针所指向的对象,而不释放指针的内存,称为Deallocation

指针本身将被销毁,因为它在堆栈中被分配,但p指向的数据将泄漏。如果你写

TestClass tc;
TestClass *p = &tc;

则所有对象将在堆栈中创建并销毁,但使用new强制使用堆中的内存。你必须使用delete来释放它

new用于在堆中为c++类对象分配内存,在分配内存后调用对象的构造函数。

必须使用delete操作符来释放由new操作符分配的内存,否则会发生内存泄漏。

delete *p;