易码技术论坛

 找回密码
 加入易码
搜索
查看: 1397|回复: 9

[求助] 有关函数调用的临时堆栈问题

[复制链接]
发表于 2008-6-19 22:53:00 | 显示全部楼层 |阅读模式
char* getlibraryname(void)
{
    char name[10];
    char *p;
    printf("请输入词库名称:\n");
    p=name;
    gets(p);
    strcat(p,".lib");
    return p;
}
函数是这样写的,目的是取得名称。
但是想问一下,如果函数return了之后,堆栈被弹出,临时变量被清空,可是返回的地址还有用么?
发表于 2008-6-19 23:05:16 | 显示全部楼层
无用
 楼主| 发表于 2008-6-19 23:12:02 | 显示全部楼层
请问有什么解决办法呢?
用动态分配?
发表于 2008-6-19 23:21:42 | 显示全部楼层
入参,或者堆分配,即动态划分。
 楼主| 发表于 2008-6-19 23:27:26 | 显示全部楼层
谢谢前辈帮忙
发表于 2008-6-20 01:08:52 | 显示全部楼层
野指针了。。
发表于 2008-6-20 17:17:25 | 显示全部楼层
1 入参
void getlibraryname(char *p)
{
    printf("请输入词库名称:\n");
    gets(p);
    strcat(p,".lib");
    return;
}

2堆分配
char* getlibraryname(void)
{
    char *p;
    printf("请输入词库名称:\n");
    p=(char*)malloc(10);
    gets(p);
    strcat(p,".lib");
    return p;
}
发表于 2008-6-21 15:05:46 | 显示全部楼层
return strdup(p);
搞定.

评分

参与人数 1小红花 +5 收起 理由
jason + 5 精品文章

查看全部评分

发表于 2008-6-21 15:49:13 | 显示全部楼层
strdup返回的指针需要手动释放
否则就等着内存泄漏吧=。=
发表于 2008-6-21 17:56:20 | 显示全部楼层
他本来p返回的就是指针地址的一个拷贝, 而这个指针地址的存储空间是否失效, 与这个存储空间的值所指向的内容是否有效无关.
换句话说, 他p = malloc(10), 返回和strdup并无二致.
所以这只是一个障眼法, strdup只用在char p[10]情况是有必要的
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 06:58 , Processed in 0.011085 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表