子函数中为调用者分配内存的一些理解
2014-09-19 23:51
218 查看
典型的例子有四个,其中一个是错误的,先说错误的情况1.错误的例子:intfunc(char *p){if(NULL == (p = (char *)malloc(128)) );{retuen-1;}return0;}在主函数中调用:...char*p0 = NULL;func(p0);…我们知道,对于非全局变量,实参变量对形参变量的数据传递都是单向传递的,只能由实参传递给形参,不能把形参传递给实参。在func中,给形参p分配了内存,即给变量p一个值,这个值是刚分好的内存块的首地址。这里我们并没有对实参p0进行任何操作。
2.通过返回值返回这是正确分配方式之一:char*func(){char*p;if(NULL == (p = (char *)malloc(128)) );{retuenNULL;}returnp;}调用func:...char*p0 = NULL;p0= func();if(NULL== p0)....子函数中动态分配了一块128字节的内存,这块内存在子函数结束时不会被收回,因此我们可以通过返回的指针对它进行操作。
使用完的内存需要释放,这个例子中,只需要调用free(p)即可。例1因为我们不知道分配的内存首地址,无法释放该内存,在7*24小时应用场景中,这种未释放的内存越来越多,最后会导致整个系统无内存可用。
3.使用指向一个指针的指针intfunc(char **p){*p= (char *)malloc(128);if(NULL== *p) return -1;return0;}调用func:...char*p0 = NULL;if(0!= func(&p0);....实参传递的是p0这个针指变量的地址,即指向指针p0的指针,子函数中的形参就可以通过这个地址操作p0,为它分配内存
4.全局变量char*p0 = NULL;intfunc(){if(NULL == (p0 = (char *)malloc(128)) );{retuen-1;}return0;}intmain(){//调用func()if(0!= func(p0)) return -1;...return0;}全局变量作用域在整个文件,自然不存在参数传递之类的问题。
2.通过返回值返回这是正确分配方式之一:char*func(){char*p;if(NULL == (p = (char *)malloc(128)) );{retuenNULL;}returnp;}调用func:...char*p0 = NULL;p0= func();if(NULL== p0)....子函数中动态分配了一块128字节的内存,这块内存在子函数结束时不会被收回,因此我们可以通过返回的指针对它进行操作。
使用完的内存需要释放,这个例子中,只需要调用free(p)即可。例1因为我们不知道分配的内存首地址,无法释放该内存,在7*24小时应用场景中,这种未释放的内存越来越多,最后会导致整个系统无内存可用。
3.使用指向一个指针的指针intfunc(char **p){*p= (char *)malloc(128);if(NULL== *p) return -1;return0;}调用func:...char*p0 = NULL;if(0!= func(&p0);....实参传递的是p0这个针指变量的地址,即指向指针p0的指针,子函数中的形参就可以通过这个地址操作p0,为它分配内存
4.全局变量char*p0 = NULL;intfunc(){if(NULL == (p0 = (char *)malloc(128)) );{retuen-1;}return0;}intmain(){//调用func()if(0!= func(p0)) return -1;...return0;}全局变量作用域在整个文件,自然不存在参数传递之类的问题。
相关文章推荐
- 子函数中为调用者分配内存的一些理解
- 深入理解函数中分配内存的问题
- 通过函数分配内存,理解实参,形参之间的传递.
- C语言一些常用内存分配函数
- 一些存储概念自己有用需要封装内存分配函数是了解
- 内存分配与内存管理的一些理解
- 深入理解函数中分配内存的问题
- Android学习札记25:对Android虚拟机(DVM)内存分配的一些理解
- VirtualAlloc,GlobalAlloc,HeapAlloc三个分配内存函数的区别
- 关于内存分配的一些问题
- brk和sbrk及内存分配函数相关
- C++成员函数的内存分配问题
- VC常用内存分配函数HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,Malloc,New的比较
- java 编程思想笔记之this关键字(包括一些对方法在内存中的分配的解析) 推荐
- 青蛙的约会||资源控件||内存分配与函数操作||异常处理||Winsock编程
- 关于内存的一些理解
- c和c++中的内存分配和内存释放函数
- Linux内核中常见内存分配函数
- C里面的内存动态分配函数与存储类别
- 函数调用和栈的内存分配过程分析