このコードは 2 つのファイルとやり取りしていますが、これら 2 つの関数でセグメンテーション エラーが発生しており、その理由を突き止める手助けが必要です。の関数に をfileA.c
渡します。 で int 配列を作成し、それをポイントして で出力できるようにするため、は出力パラメーターとして機能します。では、配列を作成し、その配列へのポインターを設定します。int**
fileB.c
int**
fileB
foo
fileA
fileB.c
size と foo は、メイン ファイルの別の関数で初期化されます。それはうまくコンパイルされますが、出力は (if size == 10
) になります:
0 1 2 3 4 5 6 7 8 9
セグメンテーション違反
でfileA.c
:
void testPointing(int size, int** foo) {
initialize(size, foo);
int i;
for(i = 0; i < size; i++) {
printf("%d ", (*foo)[i]);
}
}
fileB.c
:
void initialize(int size, int** foo) {
int* a;
a = (int*)malloc(size * sizeof(int);
int i;
for(int i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n\n");
foo = &a;
}
セグメンテーション エラーが発生する理由を修正し、理解するための支援が必要です。fileA.c
代わりに後
foo = &a
にあるループを配置することを選択するとfileB.c
、コンパイルされて正しい出力が表示されます。