http://blog.csdn.net/zhuxiaoyang2000/article/details/8084629

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 void GetMemory(char *p) {
     p = ();
 }
 int main(){
     char *str = NULL;
     GetMemory(str);
     strcpy(str, "hello world");
     printf("%s\n",str);
     ;
 }

请问运行Test函数会有什么样的结果?

答:程序崩溃。  因为GetMemory并不能传递动态内存, Test函数中的 str一直都是 NULL。 strcpy(str, "hello world");将使程序崩溃。

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 char *GetMemory(void) {
     char p[] = "hello world";
     return p;
 }
 int main(){
     char *str = NULL;
     str = GetMemory();
     printf("%s\n",str);
     ;
 }

请问运行Test函数会有什么样的结果?

答:可能是乱码。  因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 void GetMemory(char **p, int num) {
     *p = (char *)malloc(num);
 }
 int main(){
     char *str = NULL;
     GetMemory(&str, );
     strcpy(str, "hello");
     printf("%s\n",str);
 //    if(str != NULL){
 //        free(str);
 //        str = NULL;
 //    }
     ;
 }

请问运行Test函数会有什么样的结果?

答:  (1)能够输出hello (2)内存泄漏

 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vector>
 #include <time.h>
 using namespace std;

 int main(){
     );
     strcpy(str, "hello");
     free(str);
     if(str != NULL)  {
         strcpy(str, "world");
         printf("%s", str); }
     ;
 }

请问运行Test函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预料,非常危险。  因为free(str);之后,str成为野指针, if(str != NULL)语句不起作用。

C++面试之GetMemory问题的更多相关文章

  1. C语言面试

    最全的C语言试题总结 第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被 ...

  2. C/C++ 笔试、面试题目大汇总(二)

    一.找错题 试题1: void test1() { charstring[10]; char* str1 ="0123456789"; strcpy( string, str1 ) ...

  3. 【C++基础】内存操作 getMemory改错

    内存操作的考察点:①指针 ②变量生存期及作用范围 ③动态内存申请和释放 笔试题************************************************************* ...

  4. 【转】C++ 笔试面试题目

    原文:http://blog.csdn.net/txgc1009/article/details/6700830 许多面试题看似简单,却需要深厚的基本功才能给出完美的解答.企业要求面试者写一个最简单的 ...

  5. iOS开发——面试指导

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...

  6. iOS面试贴士

    iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...

  7. 改错+GetMemory问题

    试题1: void test1() { ]; "; strcpy( string, str1 ); } 试题2: void test2() { charstring[],str1[]; in ...

  8. C++面试宝典2011版

    1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new相应free仅仅会释放内存,new调用构造函数.malloc与free是C++/C语言的标准库函数,ne ...

  9. (转)C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析

    C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析 http://www.nowcoder.com/discuss/1826?type=2&order=0&pos=23&p ...

随机推荐

  1. git之create local reposition(创建本地仓库)

    1.创建名为git-reposition的仓库 mkdir home/sunjf/git-reposition 注:home/sunjf可以指定为你想要的路径下面 2.初始化仓库 cd ~/git-r ...

  2. PHPCMS几个有用的全局函数

    1.$site_setting = get_site_setting($siteid);   这个get_site_setting()函数读取的是多站点中$siteid站点的相关配置,具体位置在网站根 ...

  3. linux 学习之路

    很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...

  4. HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...

  5. iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

    一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以 ...

  6. Android学习笔记(一)——新建一个项目

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 1.打开Android Studio时出现以下界面,点击”start a new Android Studio ...

  7. SNMP进阶

    管理信息库:MIB 我们要扩展mib首先必须清楚mib是如何定义的,用的什么语言,有哪些约定,遵循哪些规则等等.这些基本东西掌握过后,我们就可以很轻松的来写自己的mib文件了. 所谓管理信息库,或者M ...

  8. BZOJ 3365: [Usaco2004 Feb]Distance Statistics 路程统计

    Description 一棵树,统计距离不大于 \(k\) 的点对个数. Sol 点分治. 发现自己快把点分治忘干净了... 找重心使所有儿子的最大值尽量小,然后每次处理全部子树,再减去每个子树的贡献 ...

  9. 取得DIV的ID还是CLASS

    无论你想取得DIV的ID还是CLASS 最重要的是找到你想取值的DIV对象.要取得DIV对象的方法有很多.常用的有2个,一个是根据ID,用var div=document.getElementById ...

  10. Dom终

    l创建DOM元素 •createElement(标签名)  创建一个节点 •appendChild(节点)  追加一个节点 –例子:为ul插入li <!DOCTYPE html PUBLIC & ...