Правильно ли создается и уничтожается массив в приведенном коде - C (СИ)
Формулировка задачи:
Привет всем! Я начал изучать C, и хочется разобраться с массивами. Вот составил такой код:
Скажите правильно ли я создаю и убиваю двумерный массив double'ов? Про array[][] я слышал, но интересно понять что реально из себя представляют массивы, к тому же у Шилдта написано, что работа с указателями быстрее чем индексация.
int main() { double** array = malloc(10 * sizeof(double*)); for (int i = 0; i < 10; i++) *(array + i) = malloc(10 * sizeof(double)); for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) *(*(array + i) + j) = i + j; // какой-то код for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) realloc(*(array + i) + j, 0); array = realloc(array + i, 0); // чтобы array == NULL } return 0; }
Решение задачи: «Правильно ли создается и уничтожается массив в приведенном коде»
textual
Листинг программы
... int ** arr, rows, columns, i, j; ... if ( ( arr = (int**)malloc(sizeof(int*) * rows) ) == NULL ){ perror("malloc"); exit(1); } for ( i = 0; i < rows; ++i ){ if ( ( arr[i] = (int*)malloc(sizeof(int) * columns) ) == NULL ){ perror("malloc"); exit(1); } } for ( i = 0; i < rows; ++i ) for ( j = 0; j < columns; ++j ) arr[i][j] = rand() % 10; /* заполнение случайными числами */ ... for ( i = 0; i < rows; ++i ) free(arr[i]); free(arr); ...
Объяснение кода листинга программы
- Объявлены переменные:
arr
- указатель на массив указателей на целочисленные значения (int**);rows
- количество строк (целое число);columns
- количество столбцов (целое число);i
- счётчик для прохода по строкам;j
- счётчик для прохода по столбцам.
- Выделена память под массив указателей на int с помощью функции
malloc
. Если выделение памяти не удалось, то выводится сообщение об ошибке и программа завершается. - В цикле выделена память под массив int для каждой строки с помощью функции
malloc
. Если выделение памяти не удалось, то выводится сообщение об ошибке и программа завершается. - В двухмерном цикле массив
arr
заполняется случайными числами от 0 до 9 с помощью функцииrand()
. - В цикле освобождается память, выделенная под каждый элемент массива
arr[i]
, с помощью функцииfree()
. - Освобождается память, выделенная под массив
arr
, с помощью функцииfree()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д