C++:我需要释放函数内部的指针吗?

C++: do I need to free the pointer inside function?

本文关键字:内部 指针 函数 释放 C++      更新时间:2023-10-16

我需要释放ptr吗?如果是这样,如何?

#include <iostream>
using namespace std;
void printFromPtr(int *ptr);
int main()  
{   
  int a = 3;
  int numPrint = 10000;
  for (int i = 0; i < numPrint; i++)   
  {
    printFromPtr(&a);
  }   
}
void printFromPtr(int* ptr) 
{
  cout << *ptr << endl; 
}

No.

该函数正在接收来自调用方的指针,并且不知道所指向的内存是如何分配的,因此它没有尝试释放它的业务。只有调用方知道它是如何分配的,所以只有调用方知道如何释放它。

在此示例中,调用方传递指向未动态分配的局部变量a的指针,因此无需手动释放任何内容。 当变量超出范围时,它将消失。

无需释放任何指针,因为您在此处不执行任何动态内存分配。

当我们进行动态内存分配时,我们需要释放指针。

阅读此内容以获取更多信息

在您的代码中,您将指针传递给局部变量,因此无需释放 pointers.it 将自动删除(超出范围后)。

您应该仅将delete用于new获得的指针。当心悬空的指针和内存泄漏。非常害怕未定义的行为。在C++你应该更喜欢智能指针,看看这个(并在方便的时候使用标准容器)。而且您通常不会在C++中使用mallocfree(仅在 C 中)。然而,new的许多实现都是在内部使用malloc,等等......

另请阅读有关五法则、RAII、指针别名、虚拟地址空间、构造函数和析构函数、虚拟方法表的信息。看到这个问题。

否。您尚未分配动态内存,无需释放 ptr。在您的代码中,ptr 存储变量的地址驻留在堆栈中而不是堆中。