我试图理解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]);
}
Run Code Online (Sandbox Code Playgroud)
你得到了一个段落错误,因为它myArgs是未初始化的.你应该确实分配空间malloc.你不是一个浅薄的副本; 你正在复制一个指针数组.
也就是说,三指针是C中的代码气味.你永远不需要超过**.