我正在尝试理解C,特别是双指针,我遇到了这个问题。我知道一个单指针(删除for循环等)这个概念可以工作,但我似乎在定位注释中得到一个seg错误。
有人可以解释为什么我会收到此错误吗?我有预感,在我传递myArgs的地址之前我需要为它分配一些内存,但是因为我只是做一个浅拷贝,我还需要分配内存吗?
void readArgs(int argc, char *argv[], char ***myArgs) {
int i;
for(i = 0; i < argc; i++) {
/* crashes here @ i = 0 */
*myArgs[i] = argv[i];
}
}
int main(int argc, char *argv[]) {
char **myArgs;
int i;
readArgs(argc, argv, &myArgs);
for(i = 0; i < argc; i++)
printf("arg[%d]: %s\n", i, myArgs[i]);
}
答案 0 :(得分:6)
由于myArgs
未初始化,因此您遇到了段错误。您确实应该使用malloc
分配空间。你不是一个浅薄的副本;你正在复制一个指针数组。
也就是说,三指针是C中的代码气味。您永远不需要超过**
。