2 elite guang elite_guang 于 2014.05.23 16:37 提问

c 语言的free()是不是自己级联释放空间?????

比如:
struct a{

char qq;

int *pt;
};

struct a *p_a=malloc(sizeof(struct a));
p_a->pt=malloc(sizeof(int)*100);

然后是:
free(p_a);

这样, p_a->pt 所指向的空间能否被释放掉?????????

2个回答

lym753024200
lym753024200   2014.05.23 17:47

不是,它只是释放free中参数所指的内存块,不释放这个内存块中某个可能为指针的地址引用的另一个内存块

oyljerry
oyljerry   Ds   Rxr 2015.01.24 14:20

需要自己手动释放,即先释放指向的,再释放自己

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中free函数如何确定释放的空间大小
在前几天被人问到:malloc函数开辟空间返回地址的前两个字节的作用?   当被问到这个问题时,我开始回忆平时如何使用malloc.由于平时在windows下使用malloc或者new进行堆内存开辟时,发现在对多于开辟空间的地址赋值,再进行调用free或者delete时,系统会崩溃,因此,我跟他说,在malloc开辟指定长度的空间后面有部分空间用于进行校验.   今天写代码进行测试,测试代码如
C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存
1、malloc概述 2、malloc实现 3、malloc实际分配的内存 4、malloc、free实现
C语言 free() 内存释放问题
我们知道free(p)是释放掉p所指向的内存,那么是释放了多长的一段内存呢?我们的系统是如何知道要释放多少内存的呢?下面我来讲讲这个问题。 请看下面一段代码
C语言中多维数组的内存分配和释放(malloc与free)
写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误。下面贴上一些示例代码,以供参考。   如果要给二维数组(m*n)分配空间,代码可以写成下面: char **a, i; // 先分配m个指针单元,注意是指针单元 // 所以每个单元的大小是sizeof(char *) a = (char **)malloc(m * sizeof(char
数组内存申请和释放,指针数组和数组指针
一 数组指针的空间释放 1 2 3 4 int (*p)[3] = new int [4][3]; // ... delete []p;    //---1 delete[](*p);  //---2 在释放这个二维数组时,应该使用1和2哪种方式呢?哪种对呢?
陈正冲老师讲c语言之内存的申请malloc() 和释放free()
1.如何使用 malloc 函数   不要莫名其妙,其实上面这段小小的对话,就是malloc的使用过程。malloc是一个函数,专门用来从堆上分配内存。使用malloc函数需要几个要求: 内存分配给谁? 分配多大内存? 是否还有足够内存分配? 内存的将用来存储什么格式的数据,即内存用来做什么? 分配好的内存在哪里? 如果这五点都确定,那内存就能分配。下面先看
C语言内存管理:malloc、calloc、free的实现
任何一个对C稍稍有了解的人都知道malloc、calloc、free。前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解。 这篇文章则是通过介绍这三个函数,并简单的予以实现,对比现有C的标准库实现(glibc等)相比,并不是特别高效,我们重在阐述背后的基本原理。一、C程序的存储空间布局图1 text:整个用户空间的最低
free失败多是内存越界造成的
指针申请后被修改再free会失败 这个free错误则不好查找,因为实际的程序往往没下面的例子这么简单,可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。 当我们释放动态分配的内存时,通常会遭遇内存释放失败的错误,我遇到这么一个问题,当我无意间越界访问了动态分配内存时,在释放内存时,
c中内存分配与释放(malloc,realloc,calloc,free)函数内容的整理
程序例2    从这个例子可以看出calloc分配完存储空间后将元素初始化。   #include   #include   int main(void)   {   int i;   int *pn=(int *)calloc(10,sizeof(int));   for(i=0;i realloc:   函数简介:c语言函数    原型:extern void *realloc(vo
C语言动态内存管理malloc、calloc、realloc、free的用法和注意事项
C语言动态内存管理malloc、calloc、realloc、free的用法和注意事项 此文是参考http://www.cplusplus.com/reference/cstdlib/里的动态内存管理部分所写,如发现有问题和不足之处,请参看原文,最好能帮忙指出,谢谢。 1.void* malloc (size_t size); malloc:分配一块size Byte大小的内存,返回一个