私はCで作業していますが、別の関数内で修正された関数の中にint **
があります。私はこの問題を実行していたときにSegFaultを取得していたので、gdb
でデバッグすることにしました。私が見つけたのは、メモリがこのアレイに割り当てられていないということでした。 a
がアドレス0x0
であることを示していると何のメモリを持たない私は$1 = (int **) 0x0
を取得し、私は(プログラムのセグメンテーションフォルト前)ラインalocator(a, 4, 5)
後にブレークポイントをgdb
を実行すると私の関数は、この二重ポインタは関数内でmallocされません
void declarer()
{
int ** a;
alocator(a, 4, 5);
for (int i = 0; i < 4; i++)
for (int j = 0; j < 5; j++)
printf("%d\n", a[i][j]);
}
void alocator(int ** a, int b, int c)
{
a = (int **)malloc(sizeof(int *) * b);
for (int i = 0; i < b; i++) {
a[i] = (int *)malloc(sizeof(int) * c);
for (int j = 0; j < c; j++)
a[i][j] = j;
}
}
のようなもの、と私はp a
を書きますそれのために割り当てられます。 alocator
はなぜメモリを割り当てられませんでしたか?また、a
にメモリを割り当てるためにalocator
を取得するにはどうすればよいですか?
'値でA'。 – alain
"ダブルポインタ"は、通常は 'double *'です! – Olaf