Chinaunix

标题: c 函数调用的问题 [打印本页]

作者: gridbird    时间: 2012-11-01 02:31
标题: c 函数调用的问题
问一个函数调用的问题,实例代码如下, 每次运行都段错误,是不是函数调用的问题,好像子函数的赋值没有返回。 各位能给解释一下吗?

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]);
}

}
作者: ruomu    时间: 2012-11-01 05:08
fun1里面,aa应该写成*aa

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

作者: kongrenxin    时间: 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. }
复制代码

作者: hanzhenlll    时间: 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
作者: linux_c_py_php    时间: 2012-11-01 14:47
很明显函数形参应该用char* * *;




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2