Как правильно освободить память двумерного массива - C (СИ)

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

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

Память для test выделена так:
char **test;
test = (char **)calloc(n, sizeof(char *));
Чтобы потом ее всю освободить, достаточно сделать free(test) или нужно в цикле free(test[i]) прогонять n раз?

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

textual
Листинг программы
    char **test;
    test = (char **)calloc(10, sizeof(char *));
    test[1] = "this is a test1";
    free(test);
    test[2] = "this is a test2";
    
    printf("%s\n", test[1]);
    printf("%s\n", test[2]);

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

  1. Создается двумерный массив test типа char **, то есть массив указателей на строки символов.
  2. Используя функцию calloc, выделяется память для 10 строк, каждая из которых является указателем на строку символов.
  3. Первая строка this is a test1 записывается в массив.
  4. Выделяется память под вторую строку this is a test2.
  5. Выводится первая строка массива.
  6. Выводится вторая строка массива.
  7. Используя функцию free, освобождается память, выделенная под первую строку.
  8. Несмотря на то, что первая строка уже была освобождена, в коде пытается быть освобождена память под вторую строку. Это вызовет неопределенное поведение, так как указатель test[2] уже не указывает на действительную память.
  9. Код завершается.

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


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

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

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