当前位置:  技术问答>linux和unix

笔试遇到内存操作思考题,C语言

    来源: 互联网  发布时间:2016-04-07

    本文导语:  小妹最近去面试,常常遇到下面几个程序,我面试回来运行了一下这些程序,可是还是不能明白运行结果怎么是那样的,望各位大虾指点迷津。 问题:写出运行test函数程序运行的结果 1. void GetMemory(char *p) {  p=(char...

小妹最近去面试,常常遇到下面几个程序,我面试回来运行了一下这些程序,可是还是不能明白运行结果怎么是那样的,望各位大虾指点迷津。
问题:写出运行test函数程序运行的结果
1.
void GetMemory(char *p)
{  p=(char *)malloc(100);
}
void Test(void)
{
  char *str=NULL;
  GetMemory(str);
  strcpy(str,"hello world");
  printf("%sn",str);
}
linux下用gcc编译,运行,segment fault.(经过试验发现段错误发生在引用str处)
2.
char* GetMemory(void)
{  p[]="hello world";
   return p;
}
void Test(void)
{
  char *str=NULL;
  str=GetMemory();
  printf("%sn",str);
}
运行后发现现实的都是乱码,编译时显示:in function 'GetMemory', warning:function returns address of local variable
3.
void GetMemory(char **p,int num)
{  
   *p=(char *)malloc(num);
}
void Test(void)
{
  char *str=NULL;
  GetMemory(&str,100);
  strcpy(str,"hello");
  printf("%sn",str);
}
这个没什么错误,运行,输出“hello”
4.
void Test(void)
{
  char *str=(char *)malloc(100);
  strcpy(str,"hello");
  free(str);
  if(str!=NULL)
     {
        strcpy(str,"world");
        printf("%sn",str);
     }
}
这个不知道为什么,留着free那句指令和注释掉它,程序都显示“world”

请好心人帮忙解答一下,因为这个问题我已经遇到好几次了,几乎每次笔试都考,实在郁闷!!



|


了解一下传值和传址方式的原理。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 后天我有个JAVA的面试,他们告诉我还要先笔试,请问JAVA笔试的内容一般是什么呀?谢谢!
  • 请问去银行笔试unix ,数据库原理,都考哪些东东
  • 明天到北京国创科技有限公司笔试应聘java软件工程师,给点建议高分回报!!!!在线等待!!
  • 笔试和面试时回答不出具体服务的配置怎么办?有些Linux服务都是看书才会做的。
  • [虚心请教]笔试遇到的shell脚本编程题。
  • 嵌入式笔试的几个题目
  • [虚心请教]笔试遇到的shell脚本编程题,输出结果有点问题
  • 上午的笔试题目(帮帮忙)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3