Проблемы с инициализацией двумерного массива в чистом С
Есть двумерный массив:
double ** distance_matrix = create_matrix(4);
Есть функция, создающая его:
double ** create_matrix(size_t matrix_size)
{
double ** matrix;
matrix = (double **)malloc(sizeof(matrix) * matrix_size);
for (size_t i = 0; i < matrix_size; ++i)
{
matrix[i] = (double *) malloc(sizeof(matrix[i]) * matrix_size);
}
return matrix;
}
И, самое главное, есть функция, его заполняющая:
void init_distance_matrix(double *** matrix, int matrix_size)
{
double ** distance_matrix = *(matrix);
distance_matrix[0][0] = 0;
distance_matrix[0][1] = -1;
distance_matrix[0][2] = 7;
distance_matrix[0][3] = 25;
//printf("ok\n");
distance_matrix[1][0] = 18;
distance_matrix[1][1] = 0;
distance_matrix[1][2] = 4;
distance_matrix[1][3] = 3;
distance_matrix[2][0] = -1;
distance_matrix[2][1] = 5;
distance_matrix[2][2] = 0;
distance_matrix[2][3] = 27;
distance_matrix[3][0] = -1;
distance_matrix[3][1] = 8;
distance_matrix[3][2] = 94;
distance_matrix[3][3] = 0;
}
Проблема в том, что когда printf("ok\n")
раскоментирована, то все работает. Но стоит ее закоментировать, и программа падает на этой функции.
Источник: Stack Overflow на русском