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' 处给出分割错误;
我想传递一个数组来运行并修改其内容。
如果你把自己与太多的间接混淆,你经常会遇到这样的问题。更好的是改为:
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()
也可能失败,因此您应该检查其返回值。