资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

2级指针问题

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

void   GetMem1(char*   p)  
  {  
  p=(char*)malloc(100);  
  }  
   
  void   GetMem2(char   **p,int   num)  
  {  
  *p=(char*)malloc(num);  
  }  
   
  为什么第一种不对,第二中对那?

网友回答:

发表者:pomelowu

首先,楼主你忘了free了  
   
  其次,在第一个函数中,p是得到了分配空间的地址,但是它却没有修改main中的str1的值。因为str1是一个指针,它其实是一个int型。而在GetMem1中,形参p只是这个int型的副本,修改了p的值却没能够修改str1的值。

发表者:kunpengzhi

由于形参的传递是值拷贝的过程,是在被调用函数的栈空间建立一份形参的拷贝,所以为了使用被调用函数对形参的操作被传回调用函数,所以应将形参的地址传给被调函数,即使用指针作为函数参数。  
   
  楼主的代码是想把对指针的修改传递给调用函数,因此要把指针的地址传给被调函数,所以需要使用指针的地址作为函数参数,即使用二级指针传递。

发表者:yinenlai

To   all:  
   
   
  void   GetMem1(char*   p)  
  {  
  p=(char*)malloc(100);  
  }  
   
  void   GetMem2(char   **p,int   num)  
  {  
  *p=(char*)malloc(num);  
  }  
   
  第一个函数,是有内存泄露的问题  
  问题是第二个函数,为什么没有   delete   *str2   也能执行呢?在vc   6。0

发表者:yangfasheng

UP


 

 
热门推荐笔记本: 东芝笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved