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

が初期化されていないため、segfaultmyArgsが発生しています。実際に でスペースを割り当てる必要がありmallocます。浅いコピーを作成しているわけではありません。ポインターの配列をコピーしています。

とは言っても、トリプル ポインターは C のコードの匂いです**

于 2012-05-19T18:32:00.637 に答える