一个面试题,求解?

[复制链接]
查看11 | 回复6 | 2021-1-27 06:26:13 | 显示全部楼层 |阅读模式
说出函数运行结果,并说明为什么
voidmalloc(char*p)
{
p=(char*)malloc(100);
}
intmain()
{
char*p=NULL;
malloc(p);
if(P!=NULL)
{
cout -->
回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
输出error,如果是这样调用malloc(&p);的话,就输出ok,要注意看传参时是传地址还是内容。。。
回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
建立一个char型的内存空间,成功了就ok不成功则error
回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
可能输出ok也可能输出error,因为malloc(p)是向内存申请一段地址空间,不一定会成功。如果成功就输出ok,失败则输出error
回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
应该编译通过不了吧。
voidmalloc(char*p)
{
p=(char*)malloc(100);
}

回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
如DelphiGuy所说,这个编译会出错的,但错误却不在malloc处。
voidmalloc(char*p)//名称与库函数相同,这不是一个好行为。
{
//malloc重名函数,如果已经#include这里会依据重载规则,匹配正确的函数。
p=(char*)malloc(100);
//分配的内存没有释放,函数退出后地址将丢失,造成内存无法释放,这就是常说的内存泄漏。
}
intmain()
{
char*p=NULL;
malloc(p);//这是值调用,p不会被改变,依然是NULL。
if(P!=NULL)//这个大写P没定义不是小写p啊.出现编译错误是肯定的。

{
cout<<“ok”<<endl;
}
else
{
cout<<“error”<<endl;//因为p==NULL,所以结果会执行这一句。
}
}
作为试题的话,要注意的地方就多了,首先要凭肉眼,看出所有的编译错误,然后再考虑逻辑错误及运行期错误。
回复

使用道具 举报

千问 | 2021-1-27 06:26:13 | 显示全部楼层
疏忽了一个地方:intmain()函数没有返回值,这会引起一个警告。其运行结果是函数会返回一个未初始化的值(未定值)
不愿意被别考就是这样,太容易被考倒了。幸好学生时代已过去。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行