【发布时间】:2013-08-22 18:07:33
【问题描述】:
我有一个关于将 c 中的数组传递给函数的问题。
当我运行这个程序时,它给了我一个分段错误
int main()
{
char **ptr= NULL;
test(ptr);
printf("%s", ptr[0]);
return 0;
}
void test(char **ptr)
{
ptr = (char **) malloc(sizeof(char *));
ptr[0] = (char *) malloc(sizeof(char)*5);
strcpy(ptr[0], "abc");
return;
}
但这工作得很好
int main()
{
char **ptr= NULL;
test(&ptr);
printf("%s", ptr[0]);
return 0;
}
void test(char ***ptr)
{
*ptr = (char **) malloc(sizeof(char *));
*ptr[0] = (char *) malloc(sizeof(char)*5);
strcpy(*ptr[0], "abc");
return;
}
有人能解释一下原因吗?
【问题讨论】:
-
因为公开编程至少需要三颗星?
-
第一个 sn-p 通过值传递指针到指针,因此设置值 sans-deference 相当于修改本地 var 仅此而已。建议您查看 C 中的按地址传递参数,这是您的第二个 sn-p 正在做的事情。 (注意:第二个 sn-p 中的第一个 sizeof 在技术上是错误的。它应该是
sizeof(char**),或者更容易记住,sizeof(*ptr)。(和 @KerrekSB,+1,太棒了)。 -
你基本上是在
test()函数中修改ptr。制定一个经验法则 - 如果您正在修改函数中的变量,则在其中传递变量的地址。因此address of char **将在此处传递,即char ***。
标签: c arrays pointers segmentation-fault