C++:我需要释放函数内部的指针吗?
C++: do I need to free the pointer inside function?
我需要释放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++中使用malloc
和free
(仅在 C 中)。然而,new
的许多实现都是在内部使用malloc
,等等......
另请阅读有关五法则、RAII、指针别名、虚拟地址空间、构造函数和析构函数、虚拟方法表的信息。看到这个问题。
否。您尚未分配动态内存,无需释放 ptr。在您的代码中,ptr 存储变量的地址驻留在堆栈中而不是堆中。
相关文章:
- 指针没有更新它在void函数内部指向的值
- 为什么向量内部的指针在从函数返回时会发生变化?
- 如何在类内部使用和访问静态指针到成员值s_ptm?
- 正确的方法是什么?调用指针到指针到指针内部的函数?
- 静态指针指向这个为mock for googletest定义的类内部
- 指针(指向指针)和新/malloc 向量(向量内部)c++
- 如何让指针的深层副本将内部结构发送到内核?
- 指向C++中成员的指针如何在内部工作?
- 作为 int 传递和类内部指针之间的差异给我带来了分段错误
- 指针帮助:取消指向访问其内部数据的结构的指针
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 如果访问对象,则指向的对象内部的指针会更改内存位置
- 函数指针仅在 main 内部工作
- 如何将功能指针传递到该功能内部的函数
- 当指针作为指向另一个功能内部指针的指针传递时会发生什么
- 获取指向自我内部班级的指针
- 为具有内部指针的对象实现swap()
- 通过内部指针隐藏实现详细信息
- 指向另一个结构的内部指针的结构指针
- 标准::移动 - 标准::内部指针