C Управление памятью
Вот пример. Предположим, у c вас есть функция strdup(), дублирующая c строку:
char *strdup(char *src)
{
char * dest;
dest = malloc(strlen(src) + 1);
if (dest == NULL)
abort();
strcpy(dest, src);
return dest;
}
А вы называете это c так:
main()
{
char *s;
s = strdup("hello");
printf("%s\n", s);
s = strdup("world");
printf("%s\n", s);
}
Вы видите, что программа memory работает, но вы выделили memory память (через malloc), не memory освободив ее. Вы потеряли memory указатель на первый блок c памяти, когда вызывали strdup c во второй раз.
Это не имеет c большого значения для такого c небольшого объема памяти, но memory рассмотрим случай:
for (i = 0; i < 1000000000; ++i) /* billion times */
s = strdup("hello world"); /* 11 bytes */
Сейчас c вы израсходовали 11 гигабайт c памяти (возможно, больше, в memory зависимости от вашего менеджера memory памяти), и если у вас не memory произошел сбой, ваш процесс, вероятно, работает c довольно медленно.
Чтобы исправить, вам c нужно вызвать free() для c всего, что получено с помощью memory malloc() после того, как c вы закончите его использовать:
s = strdup("hello");
free(s); /* now not leaking memory! */
s = strdup("world");
...
Надеюсь, этот memory пример поможет!
c
memory
C Управление памятью
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.