函数中的指针分配的内存怎么释放
内存 函数 怎么 指针 分配 释放
2023-09-11 14:16:45 时间
被调用函数里动态分配的内存要不要手动释放
20
我想手动释放来着,但是指针是在被调用函数里声明的,在调用函数里释放不了。
我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放。
我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放。
你指的“动态分配”是系统自动分配内存,如 char c[100];
还是手动分配的,如 char *p = (char *)malloc(100);
如果是第一种方式,则不需要手动释放。
第二种方式,释放时需要制定内存区域的指针,如free(p)。如果你在调用函数里手动分配了内存,那么需要将内存指针返回,然后再释放。
如
1
2
3
4
5
6
7
8
9
10
|
char
* proc1()
{
char
*p = (
char
*)
malloc
(100);
retrun p;
}
void
proc2()
{
char
*p = proc1();
//调用 proc1
free
(p);
}
|
其他
都看糊涂了,你的意思是如下代码吗?
int* Func2(void)
{
int *p = new int(0);
return p;
}
void Func(void)
{
int *p = Func();
delete p;
p = NULL;
}
如果是如上代码,不可能释放不了,堆是属于整个进程的,在堆中申请的内存在任何地方都可以释放.
int* Func2(void)
{
int *p = new int(0);
return p;
}
void Func(void)
{
int *p = Func();
delete p;
p = NULL;
}
如果是如上代码,不可能释放不了,堆是属于整个进程的,在堆中申请的内存在任何地方都可以释放.
我看的是C 被调用函数里的变量不是本地变量吗,它在函数结束时是不是自动删除的。而不用手动释放。
首先,被调用函数里的变量是在线程栈中分配的,在离开作用域里自动回收这是没错的.但这里的自动变量是指针P,而不是指针所指向的内存,这里是有区别的,指针P所占用的内存当然会自动回收,但指针所指的内存是由malloc分配的,这是在进程的默认堆里分配的,必须用free回收(不过就算没调用free程序结束时也会由操作系统回收). 从你发出的代码来看是完全没有问题的,不知道你说的不能释放是什么意思.
相关文章
- 【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数
- RDD:基于内存的集群计算容错抽象
- 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- Spark创建RDD的四种方式(一):从集合(内存)中创建 RDD代码示例
- Atitit 锁的不同层级 app锁 vm锁 os锁 硬件锁 目录 1. 在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制1 1.1. test and set指令1 1.2. 锁内
- 内存泄漏检测工具:Deleaker 2022
- Linux LED字符设备驱动 地址映射 ioremap 函数 iounmap 函数 I/O 内存访问函数
- JAVA_SE基础——24.面向对象的内存分析
- 【Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )
- 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 )
- 【Linux 内核 内存管理】memblock 分配器编程接口 ④ ( memblock_alloc 函数 | memblock_alloc_base 函数 )
- 【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ⑤ ( mmap_region 函数执行流程 | mmap_region 函数源码 )
- 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
- 【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )
- Caused by: java.lang.RuntimeException: by java.lang.OutOfMemoryError: PermGen space(tomcat 启动时提示内存溢出)
- linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问
- malloc 函数本身并不识别要申请的内存是什么类型
- glibc: nptl: pthread_attr_init & pthread_attr_destroy;内存泄漏的可能
- 内存操作函数之memmove和memcmp
- 【java】Java 内存模型