は、関数の呼び出しの2例を考えてみましょう。C関数の引数とポインタ
今すぐ下記の場合:
void Convert(int number, int *staticPointer)
{
int * dynamicPointer = malloc(sizeof(int));
*dynamicPointer = number;
staticPointer = dynamicPointer;
}
int main()
{
int *p;
Convert(5, p);
printf("The number is: %d", *p);
free(p);
}
これは、セグメンテーションフォールトが発生します。異なるパラメータでさまざまな方法で関数を呼び出すことに注意してください。違いは関数の呼び出しであることを理解しています。
誰かが私に最初の例のように関数を呼び出さなければならない理由を教えてください。なぜ、他の例が機能しないのですか(メインでクラッシュします)?
私のプログラムの目的は、関数を介して特定のメモリアドレスへの静的ポインタを参照することです。
最初のものは 'main()'関数でポインタを変更します。 2番目の関数は 'Convert()'関数でポインタのコピーを変更しますが、 'main()'関数のポインタは変更しないので、 'main()'のポインタは初期化されていません。あなたにそれが間違っている(それは保証されていない)ことを伝えるためにクラッシュしました。 –