Извините, если заголовок недостаточно конкретен по этому вопросу, но у меня есть некоторые действительно странные и противоречивые проблемы с двойными указателями, и я не знаю, как описать их в одном предложении.
По сути, каждый раз, когда моя программа запускается, она выделяет матрицу, размер которой генерируется случайным образом на лету.
coord mapSize;
mapSize.row = randomRange(3, 5);
mapSize.column = randomRange(5, 7);
char** map = (char**) malloc (mapSize.row * sizeof(char));
for (int i = 0; i < mapSize.row; i++)
{
map[i] = (char*) malloc (mapSize.column * sizeof(char));
}
Тогда матрица инициализируется:
for (int i = 0; i < mapSize.row; i++)
{
for (int j = 0; j < mapSize.column; j++)
{
map[i][j] = CLEAN_FLOOR_SYMBOL;
}
}
Это прекрасно работает, если размер матрицы не превышает 4 строки. Если это происходит, программа просто падает, когда инициализация попадает в пятую строку. Что еще более странно, так это то, что даже если число строк превышает 5, проблема все еще возникает, когда инициализация достигает пятой строки.
Я подтвердил это, распечатав некоторые значения во время циклов инициализации.
printf("r: %d c: %d\n\n", mapSize.row, mapSize.column);
for (int i = 0; i < mapSize.row; i++)
{
printf("r: %d | c: ", i);
for (int j = 0; j < mapSize.column; j++)
{
map[i][j] = CLEAN_FLOOR_SYMBOL;
printf("%d ", j);
}
printf("\n");
}
Здесь было 6 строк, но программа все еще не работала при попытке инициализировать пятую.
Что еще более странно, так это то, что ни одна из этих проблем не возникает при запуске программы на консоли eclipse. Итак, как и я все испортил?