void retsom(char **page)
{
*page = (char*) malloc(sizeof(char) * 10);
*page[0] = 'a';
*page[1] = 'b';
}
void main()
{
char *page = NULL;
retsom(&page);
printf("%c %c",page[0],page[1]);
}
此代码给出了分段错误。它在* page [1] ='b'给出了分段错误;
我想传递一个数组来运行并修改其内容。
答案 0 :(得分:2)
如果你把自己与太多的间接混淆,你经常会遇到这样的问题。更好的是改为:
void retsom(char ** page)
{
char * newpage = malloc(10);
if ( !newpage ) {
perror("couldn't allocate memory");
exit(EXIT_FAILURE);
}
newpage[0] = 'a';
newpage[1] = 'b';
*page = newpage;
}
完全避免这个问题。这样做的好处是,如果您想要在malloc()
或其他故障的情况下执行除终止之外的其他操作,您还没有覆盖调用者提供的指针,因此您的函数在异常条件下表现得更好。
请注意,根据定义,sizeof(char)
总是1
,因此是多余的,并且您不应该从C malloc()
转换malloc()
的返回值{{1}}也可能失败,所以你应该检查它的返回值。