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
int alloc_mem(char ***out)
{
int i, j;
*out = (char **)malloc(100*sizeof(char *));
if(!(*out))
return -1;
for(i=0;i<100;i++)
{
(*out)[i] = (char *)malloc(50);
if(!(*out)[i])
{
for(j=0;j<i;j++)
free((*out)[j]);
free(*out);
*out = NULL;
return -1;
}
sprintf((*out)[i],"string %d",i);
}
return 0;
}
int main(int argc,char **argv)
{
char **str=NULL;
int i;
if(alloc_mem(&str) == -1)
return -1;
for(i=0;i<100;i++)
{
fprintf(stderr,"%s\n",str[i]);
}
return 0;
}
复制代码
作者:
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