Динамические массивы: использование realloc () без утечек памяти

Я использую realloc, чтобы изменить размер выделенной памяти:

char **get_channel_name(void)   
{
    char **result;
    int n;

    result = (char **) 0;
    for (elem = snd_mixer_first_elem(handle), n = 0; elem; elem = snd_mixer_elem_next(elem)) {
        if (!snd_mixer_selem_is_active(elem))
            continue;
        if (snd_mixer_selem_has_playback_volume(elem) &&
            snd_mixer_selem_has_playback_switch(elem) &&
            snd_mixer_selem_has_capture_switch(elem)) {
            if (result == (char **) 0)
                result = (char **) malloc(sizeof(char *));
            else
                result = (char **) realloc(result, sizeof(char *) * (n + 1)); /* nulled but not freed upon failure */
            result[n++] = strdup(snd_mixer_selem_get_name(elem));
        }
    }

    if (result == (char **) 0)
        return NULL;

    result = (char **) realloc(result, sizeof(char *) * (n + 1)); /* nulled but not freed upon failure */
    result[n] = NULL;

    return result;
}

Когда я проверяю код с помощью статического анализа кода C / C ++ с помощью инструмента cppcheck, выводятся следующие предупреждения:

Common realloc mistake: 'result' nulled but not freed upon failure

Как я могу исправить эти 2 возможных утечки памяти?

Ответы на вопрос(2)

Ваш ответ на вопрос