我是否需要释放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;
}
答案 0 :(得分:11)
该函数正在接收来自调用者的指针,并且不知道指向的内存是如何分配的,因此它没有尝试释放它的业务。只有调用者知道它是如何分配的,所以只有调用者知道如何释放它。
在此示例中,调用者正在将指针传递给未动态分配的局部变量a
,因此无需手动释放。当变量超出范围时,变量将消失。
答案 1 :(得分:4)
没有必要释放任何指针,因为你没有在这里进行任何动态内存分配。
答案 2 :(得分:1)
答案 3 :(得分:0)
您应该仅对delete
获得的指针使用new
。谨防dangling pointers和memory leaks。非常afraid undefined behavior。在C ++中,您应该更喜欢smart pointers,请参阅this(并在方便时使用标准containers)。而且您通常不在C ++中使用malloc
和free
(仅在C中)。但是new
的许多实现都是内部使用malloc
等...
另请阅读rule of five,关于RAII,关于pointer aliasing,关于virtual address space,关于constructors和destructors,关于{ {3}}。请参阅virtual method tables问题。
答案 4 :(得分:0)
不。你还没有分配动态内存&amp;没有必要释放ptr。在你的代码中,ptr存储变量的地址驻留在堆栈而不是堆中。