Правильно ли создается и уничтожается массив в приведенном коде - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет всем! Я начал изучать C, и хочется разобраться с массивами. Вот составил такой код:
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;
}
Скажите правильно ли я создаю и убиваю двумерный массив double'ов? Про array[][] я слышал, но интересно понять что реально из себя представляют массивы, к тому же у Шилдта написано, что работа с указателями быстрее чем индексация.

Решение задачи: «Правильно ли создается и уничтожается массив в приведенном коде»

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);
...

Объяснение кода листинга программы

  1. Объявлены переменные:
    • arr - указатель на массив указателей на целочисленные значения (int**);
    • rows - количество строк (целое число);
    • columns - количество столбцов (целое число);
    • i - счётчик для прохода по строкам;
    • j - счётчик для прохода по столбцам.
  2. Выделена память под массив указателей на int с помощью функции malloc. Если выделение памяти не удалось, то выводится сообщение об ошибке и программа завершается.
  3. В цикле выделена память под массив int для каждой строки с помощью функции malloc. Если выделение памяти не удалось, то выводится сообщение об ошибке и программа завершается.
  4. В двухмерном цикле массив arr заполняется случайными числами от 0 до 9 с помощью функции rand().
  5. В цикле освобождается память, выделенная под каждый элемент массива arr[i], с помощью функции free().
  6. Освобождается память, выделенная под массив arr, с помощью функции free().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы