我在以下代码上遇到分段错误:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void init_test(char ***test) {
*test = malloc(2 * sizeof(char *));
*test[0] = malloc(3);
*test[1] = malloc(3);
strcpy(*test[0], "12");
strcpy(*test[1], "13");
}
int main()
{
char **test = NULL;
init_test(&test);
printf("1: %s, 2: %s", test[0], test[1]);
printf("Hello World");
return 0;
}
我对此有两个不同的变体,但是我不确定如何在其他函数中正确初始化char **。
答案 0 :(得分:3)
这是operator precedence的问题。表达式*test[0]
等于*(test[0])
,而不是您期望的(*test)[0]
。
答案 1 :(得分:1)
数组索引运算符的优先级比解除引用运算符的优先级高。您需要添加括号:
(*test)[0] = malloc(3);
(*test)[1] = malloc(3);
strcpy((*test)[0], "12");
strcpy((*test)[1], "13");