CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道面试题,请指点

楼主pianoman(神父)2006-03-17 17:39:00 在 C/C++ / C语言 提问

char   *GetMemory(void){  
  char   p[]   =   "hello   world";  
  return   p;  
  }  
  void   Test(void){  
  char   *str   =   NULL;  
  str   =   GetMemory();  
  printf(str);  
  }  
  这道题运行test函数,为什么是"无效指针,输出不确定"? 问题点数:20、回复次数:16Top

1 楼firetoucher(风焱)回复于 2006-03-17 17:46:37 得分 10

char   p[]   =   "hello   world";  
  等于  
  char   p[11]   =   "hello   world";  
  局部存储空间,在函数返回以后该空间无效。  
  改为  
  char   *p   =   "hello   world";//有trap,不过在很多编译能满足上面代码的要求  
  static   char   p[]   =   "hello   world";  
   
   
  FT  
  --  
  Anything   one   man   can   imagine,   other   men   can   make   real.Top

2 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 19:53:36 得分 5

栈   空间指针,  
  函数返回后,  
  空间被释放,  
  内容将不可预测   ~    
  为无效操作指针   ~Top

3 楼liu_kewei(可为)回复于 2006-03-17 20:53:35 得分 0

细节,还是细节.Top

4 楼fiftymetre(50米深蓝)回复于 2006-03-17 21:29:45 得分 0

局部存储空间 的问题。楼上面说的都是有道理的。Top

5 楼bohlee(我心澎湃)回复于 2006-03-17 21:30:19 得分 0

高质量c++编程指南Top

6 楼ytfrdfiw()回复于 2006-03-18 08:16:44 得分 0

p的作用域(有效期)只在GetMemory中,有一种变通的方法可以实现以上功能,代码如下:  
  void   GetMemory(char   **p)  
  {  
  *p   =   (char   *)malloc(10);//见笑,c的写法  
  strcpy(*p,"Hello");  
  }  
   
   
   
  int   main(void)  
  {  
  char   *p   =   "whatsss";  
  cout   <<   p   <<   endl;  
  GetMemory(&p);  
  cout   <<   p   <<   endl;  
  return   0;  
  }Top

7 楼ugg(逸学堂(exuetang.net))回复于 2006-03-18 10:10:14 得分 0

栈变量,在函数调用结束后,就会自动释放。  
  如下没有问题了  
  static   char   p[]   =   "hello   world";  
  或者  
  char   *p   =   "hello   world";  
  Top

8 楼lic_zzg()回复于 2006-03-18 10:16:41 得分 0

面试中考这类题都BT。。。  
  Top

9 楼lic_zzg()回复于 2006-03-18 10:18:02 得分 0

高质量C/C++。。。真是。。。没法说了。。  
   
  下回,劝大家再去面C工作,建议把高质量C/C++熟背。。让他再考!!!!!!Top

10 楼Acoolice()回复于 2006-03-18 10:22:38 得分 0

学习Top

11 楼laofuxing(laofuxing)回复于 2006-03-18 10:48:32 得分 0

这都是基本功,如果这也叫变态,你还是不要当程序员了!Top

12 楼guojiwei2002(心如止水)回复于 2006-03-18 12:33:51 得分 0

程序的编写总是在不段的出错中积累起来的!Top

13 楼hustacsky(见好不收)回复于 2006-03-18 12:44:41 得分 5

char   *GetMemory(void){  
  char   p[]   =   "hello   world";  
  return   p;  
  }中的p是数组,数组是存储在栈上,而栈空间在函数结束后就释放了,所以返回的指针其实其空间已经被释放了!就变成了"无效指针,输出不确定"?Top

14 楼zhouyinhui(我也飘~~过)回复于 2006-03-18 14:31:41 得分 0

这是面试题,还是在书上抄的,昨天我刚在某书上看到这题,   欺骗是不对的Top

15 楼tudoushishei(土豆)回复于 2006-03-18 18:28:04 得分 0

这道题以前见过(在csdn上),数组存放在堆栈内存中,释放掉了。Top

16 楼ttlyfast()回复于 2006-03-18 18:34:23 得分 0

markTop

相关问题

  • 华为面试题里有一道很不明白,望高手指点,多谢!
  • 一道很经典的C++面试题,希望大虾进行指点。
  • 一道面试题
  • 一道面试题????
  • MICROSOFT 面试题一道
  • 一道面试题
  • 一道面试题!
  • 一道面试题
  • 一道面试题
  • 一道面试题

关键词

  • 函数
  • 指针
  • getmemory
  • 无效
  • 空间
  • hello world
  • char
  • str

得分解答快速导航

  • 帖主:pianoman
  • firetoucher
  • jixingzhong
  • hustacsky

相关链接

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

广告也精彩

反馈

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