函数指针传递
2016-06-07 22:40
162 查看
void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char)* num); int i = 0; } int main(int argc,char** argv) {/* char buf1[] = "123"; aa(buf1); */ char *str = NULL; GetMemory(str, 100); return 0; }
先看这个例子,函数GetMemory明显不能分配内存给str,而且还会造成内存泄漏。
分析一下过程:
1.声明并定义str,str地址为0x00000000;
2.进入函数。把str拷贝给p,即p只是一个str的副本,拥有str的地址值:0x00000000;
3.malloc开始分配内存,分配成功后,p的地址肯定不是原来的0x00000000,是什么不重要,反正肯定不是str的那个地址了。
4.函数执行完了,返回。内存必然分配成功,原来的那个p的是指向那块内存的指针,但是并没有赋给str的这一操作,所以str仍然是原来0x00000000.
char *GetMemory(int num) { char *p = (char *)malloc(sizeof(char)* num); return p; }
看这个函数,main里补一句,char *str=GetMemory(100);
1.p被定义,分配了一段内存,p指向那段内存。p这个指针在栈上,而那段内存在堆上;
2.函数返回p,此时拷贝一遍p,即函数产生了一个p的副本,p的地址被返回给str。
3.恭喜str成功领导了那块内存!
可以给str鼓掌了!
相关文章推荐
- 双系统Ubuntu 14.04+Cuda7.5+Theano+OpenBLAS+cuDNN v5 全配置
- 一维数组的开辟 赋值 应用
- Handler的一个图片轮播程序
- 团队项目失败总结
- 支付宝支付源码
- 愚蠢的宠物图解(并查集父思想节点表示法)
- 图片屏幕满天飞
- interview-prepare
- 使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)
- java异常体系
- 【java并发】线程同步工具Semaphore的使用
- 浅谈测试驱动开发(TDD)
- 认识Zygote
- Java内存模型
- 粗浅看 java反射机制
- 感觉这里才是github比较全面通俗易懂的讲解,一看就明白怎么回事
- 水塘抽样 - Reservoir Sampling
- 认识Zygote
- iscntrl字符串测试函数应用实例
- MySQL(11)- Galera 多主多活