C - 为函数内的双指针赋值

时间:2012-05-19 18:29:38

标签: c pointers

我正在尝试理解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]);
}

1 个答案:

答案 0 :(得分:6)

由于myArgs未初始化,因此您遇到了段错误。您确实应该使用malloc分配空间。你不是一个浅薄的副本;你正在复制一个指针数组。

也就是说,三指针是C中的代码气味。您永远不需要超过**