malloc面试题目(转) - [C++]
试题4:
| void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( void )   | 
试题5:
| char *GetMemory( void ) { char p[] = "hello world"; return p; } void Test( void )  | 
试题6:
| void GetMemory( char **p, int num ) { *p = (char *) malloc( num ); } void Test( void )  | 
试题7:
| void Test( void ) { char *str = (char *) malloc( 100 ); strcpy( str, "hello" ); free( str ); ... //省略的其它语句 }  | 
解答:
试题4传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
| char *str = NULL; GetMemory( str );  | 
  后的str仍然为NULL;
-------------------------------------------------------------------------
  指针传递还是按值传递   
  所以并没有实现帮你把str开一块空间   
  只是值的拷贝,就是把str的值赋给p   
  然后p开了空间,但是str还是没开   
    
  所以你要void   GetMemory(char   **p,   int   num)   
    
  *p   =   (char   *)malloc(sizeof(char)   *   num);   
      
    
  char   *str   =   NULL;   
  GetMemory(&str,   100); 
-------------------------------------------------------------------------
  试题5中
| char p[] = "hello world";  return p;  | 
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
| *p = (char *) malloc( num ); | 
后未判断内存是否申请成功,应加上:
| if ( *p == NULL ) { ...//进行申请内存失败处理 }  | 
试题7存在与试题6同样的问题,在执行
| char *str = (char *) malloc(100); | 
后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:
| str = NULL; | 
试题6的Test函数中也未对malloc的内存进行释放。
剖析:
试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:
(1)指针的理解;
(2)变量的生存期及作用范围;
(3)良好的动态内存申请和释放习惯。
再看看下面的一段程序有什么错误:
| swap( int* p1,int* p2 ) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; }  | 
在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为:
swap( int* p1,int* p2 )
{
 int p;
 p = *p1;
 *p1 = *p2;
 *p2 = p;
}
malloc面试题目(转) - [C++]的更多相关文章
- C/C++ 笔试、面试题目大汇总 转
		
C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...
 - C++程序员面试题目总结(涉及C++基础、多线程多进程、网络编程、数据结构与算法)
		
说明:C++程序员面试题目总结(涉及C++基础知识.多线程多进程.TCP/IP网络编程.Linux操作.数据结构与算法) 内容来自作者看过的帖子或者看过的文章,个人整理自互联网,如有侵权,请联系作者 ...
 - C语言经典面试题目(转的,不过写的的确好!)
		
第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...
 - cc++面试------17道经典面试题目分析
		
以下是C/C++面试题目,共计17个题目,其中涵盖了c的各种基础语法和算法, 以函数接口设计和算法设计为主.这17个题目在C/C++面试方面已经流行了多 年,大家需要抽时间掌握好,每一个题目后面附有参 ...
 - C语言面试题目之指针和数组
		
说明:所有题目均摘录于网络以及我所见过的面试题目,欢迎补充! 无特殊说明情况下,下面所有题s目都是linux下的32位C程序. 先来几个简单的热热身. 1.计算以下sizeof的值. char str ...
 - vc面试题目
		
class B { public: B() { cout << "default constructor" << endl; } ~B() { cout & ...
 - HTML/CS3相关面试题目
		
一.HTML/CS3基本面试题目. 1. 常用那几种浏览器测试? 1.1浏览器:IE,Chrome(谷歌),FireFox(火狐),Safari(苹果计算机的最新操作系统Mac OS X中的浏览器,使 ...
 - PHP面试题目搜集
		
搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...
 - 总结CSS面试题目的考察点及常见布局问题整理
		
整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考. 写这个博文内心有种莫名奇妙的自我谴责感,实在不应该把面试层叠样式“应试 ...
 
随机推荐
- 88.CSS---Grid 网格布局教程
			
grid 兼容性查看请点此处 最新Grid兼容 grid 布局就是给父元素(容器)添加display:grid,然后使子元素(项目)改变布局, 1 2 3 4 5 6 7 8 9 上面九个正方形的代码 ...
 - LINUX系统学习以及初学者系统下载
			
Linux系统常用命令大全 来源:服务器之家 [博客中所有文章如有不对的地方希望看官们指出,有问题也可以提出来相互交流,相互学习,感谢大家!] 初学者建议安装:sentOS Ubuntu系统下载连接h ...
 - iSCSI 网关管理 - Storage6
			
iSCSI网关集成了Ceph存储和iSCSI标准,以提供一个高可用性(HA) iSCSI目标,该目标将RADOS块设备(RBD)映像导出为SCSI磁盘.iSCSI协议允许客户机 (initiator) ...
 - .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证
			
这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...
 - Ng的数组绑定
			
tip:数据的定义需要在对应ts中进行,调用在html中 定义数组: ts中 public arr =["111","222","333"] ...
 - 20191012——POI设置单元格自动行高(思路)
			
在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...
 - IoC 之加载 Bean:总结
			
上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化 ...
 - 11g bug  event 'cursor: mutex S'-引发的CPU冲高问题
			
问题背景:客户反应数据库服务器CPU占用过高 1> 确认问题根源登录客户DB服务器: top 查看当前负载 (几乎100%)top - 10:47:55 up 29 days, 21:51, 3 ...
 - ORM查询总结版
			
目录 概要 ORM常用字段 ORM基础 自定义一个插入类型,即固定长度 创建类终极版 多对多关系表创建 常用几个代码 参数 ORM与数据库代码对应的关系 外键使用分表很麻烦,要先删除主表后,再删除 不 ...
 - pod setup 不顺利
			
JerryMacBook:~ jerry$ pod setup Setting up CocoaPods master repo $ /usr/bin/git clone https://github ...