CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于指针的问题?

楼主cg_i(半点闲)2005-10-17 19:50:30 在 C/C++ / C语言 提问

操作系统:WINXP  
  编辑器:VC  
  //头文件省略。。。。  
  void   u_p(char   *p)  
  {  
      free   (p);  
      p   =   NULL;  
  }  
   
  void   main   (void)  
  {  
      char   *pstr   =   (char   *)   malloc   (sizeof(char));  
      *pstr   =   'a';  
   
      u_p   (pstr);  
   
      if   (   pstr   ==   NULL   )  
      {  
      printf   ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?  
      }  
      system   ("pause");  
  } 问题点数:20、回复次数:10Top

1 楼csucdl(csucdl)回复于 2005-10-17 19:52:43 得分 0

void   u_p(char   *&p)  
  {  
      free   (p);  
      p   =   NULL;  
  }  
  Top

2 楼csucdl(csucdl)回复于 2005-10-17 19:56:11 得分 9

void   u_p(char   **p)  
  {  
      free   (*p);  
      *p   =   NULL;  
  }  
  void   main   (void)  
  {  
      char   *pstr   =   (char   *)   malloc   (sizeof(char));  
      *pstr   =   'a';  
   
      u_p   (&pstr);  
   
      if   (   pstr   ==   NULL   )  
      {  
      printf   ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?  
      }  
      system   ("pause");  
  }  
  Top

3 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-10-17 20:01:25 得分 1

printf   ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?  
  ---------------------------------------------------------------------------  
  释放的是内存,但指针的值仍然保留的。直接pstr=NULL就得了。Top

4 楼v41dugu(一步一生)回复于 2005-10-17 21:41:44 得分 10

void   u_p(char   *p)                 //这里的p是临时变量的p啊     和main函数里的pstr并不是一个东西    
  {  
      free   (p);  
      p   =   NULL;               //你这里把这个临时变量p赋为NULL     但是函数结束这个p就消亡了  
  }  
   
  void   main   (void)  
  {  
      char   *pstr   =   (char   *)   malloc   (sizeof(char));  
      *pstr   =   'a';                 //这里的pstr始终是指向的动态分配出来的内存啊,你把内存释放了   但是  
                                                //pstr并没有被置为NULL啊  
      u_p   (pstr);  
   
      if   (   pstr   ==   NULL   )  
      {  
      printf   ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?  
      }  
      system   ("pause");  
  }  
  Top

5 楼kahn(麟)回复于 2005-10-17 22:52:03 得分 0

觉得楼上在乱说Top

6 楼kahn(麟)回复于 2005-10-17 22:54:22 得分 0

free掉了,当然((   pstr   ==   NULL   )   ==   FALSE   )咯Top

7 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2005-10-17 23:23:57 得分 0

C没有引用的吧  
  Top

8 楼crybird(寒号鸟)回复于 2005-10-17 23:36:12 得分 0

回复人:   kahn(麟)    
  你楼上说的基本正确  
  a---->   |-------|  
  b---->   |-------|  
   
  free  
    |-------|  
    |-------|  
  a==NULL之后,  
  b是不变的,还是指向那个地方Top

9 楼kahn(麟)回复于 2005-10-17 23:55:40 得分 0

嗯,是我错了,p是NULL,pstr还是原先得地址,地址内的值为'a',搞错了,搞错了。Top

10 楼wohow()回复于 2005-10-18 09:12:53 得分 0

v41dugu(一步一生)说的完全正确Top

相关问题

  • 指针!!!!
  • this指针
  • 指针?
  • 指针
  • 指针
  • 指针!
  • this指针
  • 指针??
  • 指针
  • 指针?

关键词

  • 语句
  • 执行
  • 内存
  • 解决
  • null
  • pstr
  • 执行此语句
  • pause
  • 应该如何解决
  • 原因

得分解答快速导航

  • 帖主:cg_i
  • csucdl
  • megaboy
  • v41dugu

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo