免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1523 | 回复: 4
打印 上一主题 下一主题

[C] c 函数调用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-01 02:31 |只看该作者 |倒序浏览
问一个函数调用的问题,实例代码如下, 每次运行都段错误,是不是函数调用的问题,好像子函数的赋值没有返回。 各位能给解释一下吗?

int fun1(char **aa){

aa = (char **) malloc (100*sizeof(char *));
for (i=0; i<100;i++){
aa[i] = (char *)malloc(50*sizeof(char));
//赋值

}

int main()
{
char **bb;
fun1(bb);
for (i=0;i<100;i++)
{
fprintf(stderr,"%s", bb[i]);
}

}

论坛徽章:
0
2 [报告]
发表于 2012-11-01 05:08 来自手机 |只看该作者
fun1里面,aa应该写成*aa

main里面,char *bb;
fun1(&bb);

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-03-13 15:26:06CU大牛徽章
日期:2013-03-13 15:26:47
3 [报告]
发表于 2012-11-01 12:43 |只看该作者
  1. int alloc_mem(char ***out)
  2. {
  3.     int i, j;

  4.     *out = (char **)malloc(100*sizeof(char *));
  5.     if(!(*out))
  6.         return -1;
  7.     for(i=0;i<100;i++)
  8.     {
  9.         (*out)[i] = (char *)malloc(50);
  10.         if(!(*out)[i])
  11.         {
  12.             for(j=0;j<i;j++)
  13.                 free((*out)[j]);
  14.             free(*out);
  15.             *out = NULL;
  16.             return -1;
  17.         }
  18.         sprintf((*out)[i],"string %d",i);
  19.     }
  20.     return 0;
  21. }

  22. int main(int argc,char **argv)
  23. {
  24.     char **str=NULL;
  25.     int i;

  26.     if(alloc_mem(&str) == -1)
  27.         return -1;
  28.     for(i=0;i<100;i++)
  29.     {
  30.          fprintf(stderr,"%s\n",str[i]);
  31.     }
  32.     return 0;
  33. }
复制代码

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
4 [报告]
发表于 2012-11-01 13:10 |只看该作者
可以看看C/C++ 高质量编程, int fun1(char **aa) 是栈指针,在未申请堆地址的时候,指向和 char **bb; 一样的地址空间,   这两个地址本身是不同的,所以malloc后,aa指向了另外一块堆地址,但是bb本身并没有任何修改

目前的情况
malloc前
内存 aa   0x12------> 0x23
内存 bb   0x13------>0x23
malloc后
内存 aa   0x12------> 0x23
内存 bb   0x13------>0x34 .....


使用引用的情况:
malloc前
内存 aa   0x12------> 0x23
内存 bb   0x12------->0x23
malloc后
内存 aa   0x12------> 0x23
内存 bb   0x12------->0x23

你可以自己去写一段代码检验
也可以参考我之前发的一个实验例子 以及解决办法... http://bbs.chinaunix.net/forum.p ... ;extra=#pid22314342

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-11-01 14:47 |只看该作者
很明显函数形参应该用char* * *;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP