转自:http://blog.csdn.net/chujiangke001/article/details/38553173

 void GetMemory(char *p, int num)
{
p = (char*)malloc(sizeof(char)*num);
} void main(void)
{
char *str = NULL;
GetMemory(str,); //str仍然为NULL
strcpy(str,"hello"); //运行时出错
cout<<str<<endl;
}

请问运行mian函数的结果如何?其实运行是会报错的,为什么呢?

毛病出在GetMemory中。

编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p, 编译器使_p=p(二者指向同一块区域)。如果函数体内的程序修改了_p指向的内容,就导致参数p指向的内容做了相应的修改,这就是指针可以用做输出参数的原因。

但是在上述的代码中,_p申请了新的内存,也就是_p本身的值改变了,即指向了新的内存空间,但是p本身丝毫未变。所以函数GetMemory并不能输出任何东西。事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。

最新文章

  1. PV、UPV、UV简介
  2. OC面向对象—封装
  3. Linq查询数据集取得排序后的序列号(行号)
  4. jquery中的each方法,$.each \ this.each \ $.fn.each
  5. OJ题目分类
  6. oracle如何获取当年第一月,如今年是2015年,则需获取 201501
  7. Asp.Net HttpApplication请求管道与Session(一)
  8. 【进制问题】【HDU2056】A + B Again
  9. Idea+maven+tomcat部署第一个tomcat项目
  10. 分布式监控系统Zabbix3.2对数据库的连接数预警
  11. Nginx反向代理解决iframe跨域问题
  12. Jmeter性能结果分析
  13. python之字符编码(三)
  14. 树上第k大联通块
  15. C# 多线程之List的线程安全问题
  16. delphi 图片加水印源代码
  17. winform listbox 使用DrawMode使用OwnerDrawVarialbe或OwnerDrawFixed无水平滚动条
  18. U-Mail邮件群发触发器功能助力营销自动化
  19. 【转载】注释AFX_MSG_MAP,AFX_DATA,AFX_DATA_MAP , Afx_MSG等宏不能删除
  20. pip安装tensorflow出错怎么办

热门文章

  1. 感知机学习算法 python实现
  2. 转载:为什么要对URI进行编码
  3. 集合之List—ArrayList
  4. ZOJ 1045 HangOver
  5. activiti 中的签收与委托 操作
  6. VC++ MFC橡皮筋技术
  7. (转)The Road to TensorFlow
  8. lvm使用总结-转
  9. google-perftools 分析JAVA 堆外内存
  10. linq中AsEnumerable和AsQueryable的区别