ダブルポインターを受け入れる関数間で、ヒープで宣言された2次元配列を渡すと、プログラムがハングしてクラッシュする理由を特定できません。
2次元配列を宣言するために選択した方法に関係があると強く感じています。配列を割り当てる関数を作成する前は、プログラムは関数に渡されたときに配列内のデータを操作できました。
したがって、ここに割り当て関数と、内部でクラッシュする関数があります。
void matrix_malloc(int **matrix, int m, int n);
void matrix_init(int **matrix, int m, int n);
int main(void)
{
int **matrix;
int m(3), n(2);
matrix_malloc(matrix, m, n);
matrix_init(matrix, m, n); // runtime error
}
void matrix_malloc(int **matrix, int m, int n)
{ // get heap memory
int i;
matrix = new int*[m];
for(i = 0; i < m; i++)
{
matrix[i] = new int[n];
}
}
void matrix_init(int **matrix, int m, int n)
{ // randomize matrix
int i, j;
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
matrix[i][j] = rand() % 10 + 1;
}
}
}