Как избежать ошибочных отчетов valgrind (или других инструментов memcheck), когда я инициализирую структуру, которая содержит динамический массив? - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу инициализировать структуру, которая содержит динамический массив, я написал все это в функции.И есть еще одна функция для очистки этой структуры, теоретически, не будет утечек памяти.Однако, когда я запускаю программу с помощью valgrind, она сообщает, что произошла утечка памяти при входе или функции init.

Во-первых, я написал эту функцию инициализации с помощью malloc для выделения памяти для этой структуры.Он сообщает об утечке памяти.

Затем я изменяю malloc на realloc (NULL, ...), чтобы избежать этого искажения, но мне это не удалось.

Я не знаю, как стандартным способом в Cявляется реализация этой функции.

#include <stdlib.h>

typedef enum
{
    RUN_SUCCESS,
    /*Failure*/
    RUN_FAILURE
} RunStat;

typedef struct
{
    char *elements;
    size_t top;
    size_t size;
} Stack;

RunStat init_stack(Stack *stack)
{
    stack->elements = (char *)realloc(NULL, 100 * sizeof(char));
    stack->size = 100;
    stack->top = 0;
    return RUN_SUCCESS;
}

RunStat free_stack(Stack *stack)
{
    free(stack->elements);
    stack->elements = NULL;
    stack->size = 0;
    stack->top = 0;
    return RUN_SUCCESS;
}


int main ()
{
    Stack stack;
    init_stack(&stack);
    free_stack(&stack);
    return EXIT_SUCCESS;
}

Каждая память здесь находится под моим контролем, я хочу, чтобы эта структура инициализировалась без какого-либо предупреждения об утечке памяти.И я хочу знать стандартный способ сделать это.

...