2

我试图理解 C,特别是双指针,我遇到了这个问题。我知道对于单个指针(删除 for 循环等),这个概念会起作用,但我似乎在定位的评论中遇到了段错误。

有人可以解释为什么我会收到这个错误吗?我有一种预感,在传递 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]);
}
4

1 回答 1

6

你得到一个段错误,因为myArgs未初始化。您确实应该使用malloc. 你不是在做一个浅拷贝;你正在复制一个指针数组。

也就是说,三重指针是 C 中的一种代码味道。你永远不需要超过**.

于 2012-05-19T18:32:00.637 回答