在线求助

yibey 2010-03-30 07:40:05

#include<iostream.h>
#include<string.h>
void fun( char *p)
{
p=(char *)malloc(100);

}
void main()
{
char *p;
fun(p);
strcpy(p,"abcd");
}

求助上次面试去遇到这样的题目,说检查错误。这里是不是就是没有释放P的所指向的空间也就是最后要加个语句FREE []P;
...全文
62 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小猴饲养员 2010-03-30
  • 打赏
  • 举报
回复
我晕。网络掉了,打了很多的回复竟然没了。
1楼的方法能解决问题。很多地方都给除了正确的方法,却没有解释为什么这样做不行。
原因是:编译器会创建函数参数的临时副本,编译器创建的副本为char *_P(假设),且使 _P = p; 并在函数中使用 _P.这样,因此在函数中,对_P所指对象所做的任何操作,既是对p所指对象的操作。所以指针参数可以用作输出参数。但本例改变了_P指向的对象,_P与p指向了不同的对象。
除了1楼的方法,还可以使用
char * fun(int num)
{
char *p = (char*)malloc(num);
return p;
}

////////////////////////////
下面代码的输出是<"p == NULL!"
#include <iostream>
using namespace std;

void fun(char *p)
{
p = (char*)malloc(100);
}

void main()
{
char *p=NULL;
fun(p);
//strcpy(p,"abcd");
if(NULL==p)
{
cout<<"p == NULL!"<<endl;
}
else
{
cout<<"sizeo(p) = "<<sizeof(p)<<endl;

}
getchar();
}
herman~~ 2010-03-30
  • 打赏
  • 举报
回复
void fun( char *&p) //参数改成传引用,传值话参数入栈会拷贝一份变量
skyczw2005 2010-03-30
  • 打赏
  • 举报
回复
还应该判断malloc成功与否。
yibey 2010-03-30
  • 打赏
  • 举报
回复
楼上说的啥啊
dubiousway 2010-03-30
  • 打赏
  • 举报
回复
神奇啊,,


3楼竟然在2楼上面~~~~~
dubiousway 2010-03-30
  • 打赏
  • 举报
回复
**p
or
&p

free 没有 []
linyongzuo 2010-03-30
  • 打赏
  • 举报
回复

#include<iostream>
#include<string.h>
using namespace std;
char* fun( char *p)
{
p=(char *)malloc(100);
return p;
}
void main()
{
char *p;
p = fun(p);
strcpy(p,"abcd");
free( p );
}

昵称很不好取 2010-03-30
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<string.h>
//void fun( char *p) //这样传值不对,应该传地址
void fun( char **p)
{
*p=(char *)malloc(100);

}
int main()
{
char *p;
// fun(p); //改为传地址
fun(&p);
strcpy(p,"abcd");
free(p);
return 0;
}

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧