Как правильно очистить память - 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освобождается память, выделенная под текущую строку - Освобождается память, выделенная под массив строк