Я на самом деле не вижу ничего плохого в коде.
Следующий код не работает, потому что location_matrix
не выделен:
location_matrix[location_num][location_num] = { {false} };
GCC разрешит следующее (как расширение):
bool location_matrix[location_num][location_num] = { {false} };
Но это взорвет ваш стек, потому что 10000 x 10000
слишком велик.
В настоящее время ваш код использует динамическое размещение. Это правильный способ сделать это, потому что матрица слишком велика, чтобы ее можно было использовать как статический массив (и может переполнить стек).
Что касается вашего последнего вопроса, «как создать 2d-массив, в котором хранятся указатели»: это можно сделать почти так же, как ваш текущий код. Просто измените bool
на int*
.
Таким образом, двумерный массив указателей NULL int
будет выглядеть следующим образом:
int ***location_matrix;
if (node_locations)
{
location_matrix = (int***)malloc(location_num*sizeof(int**));
if (!location_matrix)
{
cout<<"error 1 allocating location_matrix" << endl;
exit;
}
for (i=0; i<location_num; i++)
{
location_matrix[i] = (int**) malloc(location_num*sizeof(int*));
if (!location_matrix[i])
{
cout<<"error 2 allocating location_matrix" << endl;
exit;
}
for (j=0; j<location_num; j++)
location_matrix[i][j] = NULL;
}
}