四道经典C语言指针试题
试题一:
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf( str );
}
解答:
本题中传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
char *str = NULL;
GetMemory( str );
后的str仍然为NULL;
存在内存泄露,打印为空
试题二:
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
解答:
char p[] = "hello world";
return p;
p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
试题三:
void GetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, "hello" );
printf( str );
}
解答:
存在2处问题:
本题中的Test函数中未对malloc的内存进行释放。
本题中的GetMemory避免了试题一的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
*p = (char *) malloc( num );
后未判断内存是否申请成功,应加上:
if ( *p == NULL )
{
...//进行申请内存失败处理
}
试题四:
void Test( void )
{
char *str = (char *) malloc( 100 );
strcpy( str, "hello" );
free( str );
... //省略的其它语句
}
解答:
存在2处问题:
试题四存在与试题三同样的问题,在执行char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;
另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:
str = NULL;
更多0上一篇:面试点:C语言经典面试题(C语言面试题分析之五)
下一篇:2011年上半年5月份系统分析师上午试题答案(1)
查看评论2楼 百斯特数据 2013-05-23 12:58发表 [回复]可以深入研究研究。1楼 icesea137 2013-01-17 11:10发表 [回复]拜托,后边两道没有给出结果啊,只是说有问题,题目本来目的不是让你找问题的,求解答!发表评论
[*]用 户 名:
[*]u012412392
[*]评论内容:
[*]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场核心技术类目
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript UbuntuNFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTMLSDK IIS Fedora XML LBS Unity Splashtop UML components WindowsMobileRails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase云计算 iOS6 Rackspace WebApp SpringSide Maemo Compuware 大数据 aptechPerl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr AngularCloudFoundry Redis Scala Django Bootstrap
个人资料
littletigerat
[*]访问:541477次
[*]积分:8780分
[*]排名:第393名
[*]原创:291篇
[*]转载:8篇
[*]译文:0篇
[*]评论:576条
文章搜索
博客专栏
解析系统架构设计师试题 文章:30篇
阅读:36077解析系统分析师试题 文章:29篇
阅读:128690
文章分类
[*]系统架构师(38)
[*]项目管理(33)
[*]Android(23)
[*]C/C++(27)
[*]魅力思维(37)
[*]Database(11)
[*]GPS(5)
[*]J2ME(2)
[*]Java(12)
[*]SQLite3(3)
[*]Linux(19)
[*]Window(3)
[*]VC开发(3)
[*]安装程序制作(1)
[*]《深度探索c++对象模型》学习笔记(0)
[*]互联网(10)
[*]协议分析(5)
[*]开发工具(2)
[*]学习与思考(80)
[*]手机开发(25)
[*]新技术(10)
[*]手机行业(5)
[*]源码学习(11)
[*]激情创业(5)
[*]点滴生活(24)
[*]生活百味(49)
[*]百科解答(9)
[*]程序人生(57)
[*]系统分析(36)
[*]职场风云(25)
[*]计算机软考(121)
[*]设计模式(0)
[*]网络编程框架(1)
[*]内存管理(0)
[*]程序设计语言(1)
[*]计算机系统(2)
[*]无线通信(0)
文章存档
[*]2013年12月(2)
[*]2013年11月(1)
[*]2013年07月(3)
[*]2013年06月(7)
[*]2013年05月(1)展开
阅读排行
[*]程序员很少上《非诚勿扰》电视节目相亲之分析(46014)
[*]adb root错误信息adbd cannot run as root in productionbuilds问题解决(13179)
[*](程序员情感三部曲之一)找个程序员做老公,挺好!(11017)
[*]2009年下半年11月份信息系统项目管理师上午试题答案(分析与解答)(第5次修订修订时间:2010年03月14日02时02分)(10323)
[*](程序员情感三部曲之二)程序员如何找女朋友(9651)
[*]Android版本与Linux内核版本的关系(8715)
[*]裸考—歪理邪说通过系统分析师考试之五(分析2010上半年系统分析师上午试题21-25题)(8712)
[*]裸考—歪理邪说解析系统分析师上午考试试题之七(分析2010上半年系统分析师上午试题32-36题)(7902)
[*]成为江苏卫视《一站到底》节目站神之策略(7841)
[*]裸考—歪理邪说通过系统分析师考试之四(分析2010上半年系统分析师上午试题16-20题)(7782)
评论排行
[*]程序员很少上《非诚勿扰》电视节目相亲之分析(217)
[*](程序员情感三部曲之一)找个程序员做老公,挺好!(50)
[*]2009年下半年11月份信息系统项目管理师上午试题答案(分析与解答)(第5次修订修订时间:2010年03月14日02时02分)(20)
[*]一个技术工作者的四大核心价值理念(16)
[*](程序员情感三部曲之二)程序员如何找女朋友(16)
[*](程序员情感三部曲之三)程序员与女朋友相处之道(15)
[*]考考码农们的想象能力(12)
[*]adb root错误信息adbd cannot run as root in productionbuilds问题解决(11)
[*]2011年上半年登陆美国市场上市科技企业知多少(10)
[*]歪理邪说理论之2012年系统架构师软考成绩(8)
推荐文章
页:
[1]