У меня короткий вопрос о моем коде. Я создал две ситуации или примеры для тестирования.
пример 1:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
free(c);
}
пример 2:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
arr[i] = c;
free(arr[i]);
arr[i] = NULL;
}
Различия в примерах: помещение массива перед освобождением памяти.
Когда я запускаю пример 1, он освобождает всю память. Когда я запускаю пример 2, он не освобождает всю память.
Я искал и смотрел, но не мог понять.
Почему результат примера 2 отличается от примера 1?
Мой здравый смысл говорит мне, что примеры 1 и 2 должны приводить к одному и тому же результату, но на практике это не так. Я использую linux top для проверки использования памяти.