У меня возникла проблема с динамическим созданием «многомерного массива». Я прочитал 6.14 в разделе вопросов, связанных с comp.lang.c, и следую коду, который там был указан.Ошибка сегментации при использовании malloc для создания массива указателей на указатели
cache_array = malloc(cm_blks * sizeof(int *));
if (cache_array = NULL) {
fprintf(stderr, "out of memory\n");
exit(1);
}
for (i = 0; i < cm_blks; i++) {
cache_array[i] = malloc(6 * sizeof(int));
if (cache_array[i] == NULL) {
fprintf(stderr, "out of memory\n");
exit(1);
}
}
переменной cm_blks представляет собой целое число, в моем тестовом случае равен 8. cache_array инициализируются как:
int **cache_array;
код компилируется нормально, но я получаю ошибку сегментации на второй линии таНоса когда я запускаю вывод.
Хороший улов. Это кажется странным для многих людей, но часто бывает полезно разместить константы перед переменными в условных тестах ... например: 'if (NULL = cache_array)' поймал бы ошибку как попытку присвоить переменную переменной постоянная. Это удобный способ избежать таких тонких ошибок. –
Вау, я полностью пропустил это! Большое спасибо за вторую пару глаз! – user2321508