当我在接受双指针的函数之间传递在堆上声明的二维数组时,我无法解释为什么我的程序会挂起和崩溃。
我有一种强烈的感觉,它与我选择声明二维数组的方法有关。在我创建一个函数来分配数组之前,程序可以在传递给函数时操作数组内的数据。
所以这里是分配函数,然后是它在内部崩溃的函数:
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;
}
}
}