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

2022-07-28T10:42:44+00:00