これは、パラメーターで指定されたサイズのマトリックスにスペースを割り当て、そのマトリックスへのポインターを返す私のコードです。
int **allocateSpace(int row, int col){
int i;
int **a;
a = malloc(sizeof(int *) * row);
for(i = 0; i < row; i ++)
a[i] = malloc(sizeof(int) * col);
return a;
}
上記のコードは意図したとおりに機能します。
ただし、コードを次の形式に変更すると、セグメンテーション違反が発生します。
void allocateSpace(int **a, int row, int col){
int i;
a = malloc(sizeof(int *) * row);
for(i = 0; i < row; i ++)
a[i] = malloc(sizeof(int) * col);
}
関数から戻ったときに、allocateSpace()
割り当てられたメモリが解放されたようです(セグメンテーション違反が発生したため)。しかし、なぜ?私がしているのは、特定のポインターにメモリを割り当てることだけであり、それはすべてサブ関数で行われます。
私の質問を要約すると、コードの 2 番目の部分でセグメンテーション違反が発生するのはなぜですか? どうもありがとうございました!