局部变量问题

asdfg014 2006-09-21 05:06:36
char *Test()
{
char p[20];
memset(p,0,20);
strcpy(p,"123456789" );
return p;
}
void main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
}
这样的程序有问题吗?有什么问题
...全文
250 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ammana_babi 2006-09-22
  • 打赏
  • 举报
回复
char *p = (char *)malloc(sizeof(char)*20);
memset(p, 0, 20);
strcpy(p,"12345667890");

这三句话不就是strdup()函数等同于strdup()函数的调用吗。

唯一的区别是把申请的内存先置0而已。
alphajin 2006-09-22
  • 打赏
  • 举报
回复
我只是把楼主的程序改写一下而已,没有free这个函数,贴错了
lilome 2006-09-22
  • 打赏
  • 举报
回复
free(p) free应该释放多大的内存?
Test函数里面根本就不应该分配20个char的内存
应该分配strlen("12324567891") + 1个char
alphajin 2006-09-22
  • 打赏
  • 举报
回复
char *Test(void)
{
char *p = (char *)malloc(sizeof(char)*20);
memset(p, 0, 20);
strcpy(p,"12345667890");
return p;
}

main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
free(p);//千万别忘记释放所申请的内存吆
}
这样有错嘛?
为什么?
ammana_babi 2006-09-22
  • 打赏
  • 举报
回复
同意楼上的。

不过如果采用strdup()函数的话,容易造成内存泄漏的问题,这是C/C++程序员比较痛苦的一个

问题。

下面是MS给出的strdup()函数的源代码:

char * __cdecl strdup ( const char * string )
{
char *memory;
if (!string)
return(NULL);
if (memory = malloc(strlen(string) + 1))
return(strcpy(memory,string));
return(NULL);
}

这个函数通过malloc函数来申请内存,所申请的内存必须由函数调用者释放。

修改后的代码:

char *Test()
{
char *p;
p = strdup("123456789");
return p;
}
main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
free(p);//千万别忘记释放所申请的内存吆
}
twinsen0398 2006-09-22
  • 打赏
  • 举报
回复
用个局部字符串指针!~用strdup函数!~不要忘记释放最后的指针!~
飞哥 2006-09-21
  • 打赏
  • 举报
回复
看看输出就知道行不行了

指针可以解决
sankt 2006-09-21
  • 打赏
  • 举报
回复
//另外一种解决方案:

char *Test()
{
char *p = new char[20];
memset(p,0,20);
strcpy(p,"123456789" );
return p;
}
void main()
{
char *p=Test();
printf("\n-----%s---------\n",p);
delete []p; //注意释放空间

}
sankt 2006-09-21
  • 打赏
  • 举报
回复
条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
sumjohn 2006-09-21
  • 打赏
  • 举报
回复
有问题
char p[20]是个局部变量
是建立在栈空间里的
在Test运行结束后就消亡了
所以你在main函数里调用时值已经是错误的了
aminconi 2006-09-21
  • 打赏
  • 举报
回复
当然有问题了
char *Test(){}
里的p是临时变量
函数体里分配的空间在执行完函数就被释放了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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