Как правильно очистить память - C (СИ)
Формулировка задачи:
Пишу С-код...
Выделяю память под массив строк так:
Как теперь правильно очистить память?
Я так пытался:
Но на очистке Strings (за циклом) появляется исключение _CrtIsValidHeapPointer(pUserData). Ошибка при работе с кучей. Нужен ли вообще последний вызов free()?
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);
Решение задачи: «Как правильно очистить память»
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);
Объяснение кода листинга программы
- Объявлена двумерная массив-строка
Strings
типаchar **
- С помощью функции
malloc
выделена память подStrsCount
строк типаchar*
- В каждой итерации цикла
for
выделяется память под строку, длина которой равна длине строкиот чего-нить
плюс 1 - В каждой итерации цикла
for
освобождается память, выделенная под текущую строку - Освобождается память, выделенная под массив строк
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д