| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 566 人关注过本帖
标题:返回指针参数的函数声明问题
只看楼主 加入收藏
zz578
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-7-31
收藏
 问题点数:0 回复次数:3 
返回指针参数的函数声明问题

假设要声明一个返回指向由字符串组成的数组,字符串大小为11字节,该怎么申请?
如:
char ** get_s(void)
{
char s[10][11];
for(int n=0;n<10;n++)
{
for(int i=0;i<10&&s[n][i-1]!=EOF;i++)
{
s[n][i]=getchar();
s[n][i+1]='\0';
}
}
return s;
}
我试了不行,而书上又没有介绍,请大家给看看,谢谢。

搜索更多相关主题的帖子: 指针 函数 参数 声明 
2007-05-01 22:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
这样声明的 char s[10][11]是系统自动分配的空间,所以当get_s(void)函数调用结束后s的空间也会被系统自动释放调,所以不行

你可以这样
char** s = malloc( 10*11 );

但是还有,一点要注意,malloc出来的东西是手工分配的内存,所以必须手工释放掉。
故必须要在函数外调用free

因此这样的函数设计是不合理的,正确的做法应该是(所谓正义和邪恶从来就没用界限,不过日本人肯定是邪恶的)

char** get_s( char** s)
{
//do stuff
return s;
}

这样创建和分配s所指向的空间就和get_s无关了,也就不存在以上的问题了。

淘宝杜琨
2007-05-01 22:42
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
忘记说为什么这么做不合理了,因为函数get_s不能保证通过调用它所产生的空间一定会被释放,

而且调用这个函数的人--就算是函数的作者也会有忘记的时候--未必知道从这个函数中会分配一个空间出来,所以也就没有去free的意识。

所以这样的函数设计是危险的。

淘宝杜琨
2007-05-01 22:45
zz578
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-7-31
收藏
得分:0 
好的,谢谢你,看来只能通过
char** get_s( char** s)
{
//do stuff
return s;
}
解决了,char** s = malloc( 10*11 );free语句不懂,没有学到。

MSN:mr_zz@
QQ:284913258
计算机及应用专业
2007-05-02 07:13
快速回复:返回指针参数的函数声明问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021345 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved