Как правильно очистить память - C (СИ)

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

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

Пишу С-код... Выделяю память под массив строк так:
char **Strings;
Strings = malloc(StrsCount);
for (i=0;i<StrsCount;i++)
{
    Strings[i] = malloc(strlen("от чего-нить")+1);
}
Как теперь правильно очистить память? Я так пытался:
for (i=0;i<StrsCount;i++)   {
    free(Strings[i]);
}
free(Strings);
Но на очистке Strings (за циклом) появляется исключение _CrtIsValidHeapPointer(pUserData). Ошибка при работе с кучей. Нужен ли вообще последний вызов free()?

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

textual
Листинг программы
char **Strings;
Strings = malloc(StrsCount * sizeof(char*));
for (i=0;i<StrsCount;i++)
{
    Strings[i] = malloc(strlen("от чего-нить")+1);
}
 
for (i=0;i<StrsCount;i++)
{
    free(Strings[i]);
}
free(Strings);

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

  1. Объявлена двумерная массив-строка Strings типа char **
  2. С помощью функции malloc выделена память под StrsCount строк типа char*
  3. В каждой итерации цикла for выделяется память под строку, длина которой равна длине строки от чего-нить плюс 1
  4. В каждой итерации цикла for освобождается память, выделенная под текущую строку
  5. Освобождается память, выделенная под массив строк

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


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

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

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