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

时间:2017-10-30 06:15:09

标签: c++ pointers

我是否需要释放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; 
}

5 个答案:

答案 0 :(得分:11)

没有

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

在此示例中,调用者正在将指针传递给未动态分配的局部变量a,因此无需手动释放。当变量超出范围时,变量将消失。

答案 1 :(得分:4)

没有必要释放任何指针,因为你没有在这里进行任何动态内存分配。

答案 2 :(得分:1)

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

Read this for more info

在你的代码中你传递指向本地变量的指针,所以不需要释放指针。它会自动删除(在超出范围之后。)

答案 3 :(得分:0)

您应该仅对delete获得的指针使用new。谨防dangling pointersmemory leaks。非常afraid undefined behavior。在C ++中,您应该更喜欢smart pointers,请参阅this(并在方便时使用标准containers)。而且您通常不在C ++中使用mallocfree(仅在C中)。但是new的许多实现都是内部使用malloc等...

另请阅读rule of five,关于RAII,关于pointer aliasing,关于virtual address space,关于constructorsdestructors,关于{ {3}}。请参阅virtual method tables问题。

答案 4 :(得分:0)

不。你还没有分配动态内存&amp;没有必要释放ptr。在你的代码中,ptr存储变量的地址驻留在堆栈而不是堆中。