GetMemory 改错

简介: GetMemory 改错

试题4:

void GetMemory( char *p )
{
 p = (char *) malloc( 100 );
}
void Test( void )
{
 char *str = NULL;
 GetMemory( str );
 strcpy( str, "hello world" );
 printf( str );

试题5:

char *GetMemory( void )
{
 char p[] = "hello world";
 return p;
}
void Test( void )
{
 char *str = NULL;
 str = GetMemory();
 printf( str );
}

 试题6:

void GetMemory( char **p, int num )
{
 *p = (char *) malloc( num );
}
void Test( void )
{
 char *str = NULL;
 GetMemory( &str, 100 );
 strcpy( str, "hello" );
 printf( str );
}

试题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;


  试题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;
}
相关文章
|
2月前
|
监控 安全 网络安全
别偷懒!这些事你必须知道!
在数字化时代,SSL证书作为保护网站数据传输安全的关键工具,其重要性不言而喻。然而,安装SSL证书并非一劳永逸,它需要定期续签以确保持续的安全保护。续签不仅能提升安全性、确保合规性,还能优化用户体验。通常续签过程包括检查有效期、选择CA、提交申请、安装新证书及验证安装等步骤。提前规划、备份旧证书和设置监控提醒是续签过程中需要注意的事项。
|
5月前
|
监控 网络协议 网络性能优化
这个方法,帮了80%的网工搞定命令总是记不住的问题!
这个方法,帮了80%的网工搞定命令总是记不住的问题!
|
8月前
|
算法
重要的话说三遍 (2016)
重要的话说三遍 (2016)
47 0
|
安全 测试技术
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
201 1
|
SQL 数据库连接 数据库
机房收费系统之数据配置问题
机房收费系统之数据配置问题
92 0
|
Apache 云计算 开发者
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!
167 0
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
|
SQL 安全 数据库
记一次稍微有点曲折的getshell
记一次稍微有点曲折的getshell
|
Python 索引
初学Python常见异常错误,总有一处你会遇到!
初学Python常见错误 忘记写冒号 误用= 错误 缩紧 变量没有定义 中英文输入法导致的错误 不同数据类型的拼接 索引位置问题 使用字典中不存在的键 忘了括号 漏传参数 缺失依赖库 使用了python中对关键词 编码问题 1.
1615 0
若是等不到你,我先一个人也无妨
图片发自简书App 前段时间手机意外进水坏了,最近才忍痛剁手买了新手机,闲暇之余,也便经常上简书看看别人写的文字,不说是陶冶情操这么自命清高了,只是想在现代的网络文学中找到一点共同的慰藉吧,一连看到几篇关于对于爱情的向往与无奈,于是写几笔,在辽阔的网络文学中做一颗发声的尘埃。
974 0