Почему valgrind показывает предупреждение «утечка определенно потеряна» при возврате указателя malloc? - PullRequest
0 голосов
/ 15 апреля 2019

Я не могу понять, почему в этом коде есть утечка памяти.

Мне нужно вернуть копию входного значения.

Здесь valgrind показывает предупреждение "8 байтов в 1 блоках определенно потеряны в записи потерь 1 из 1"

void* ADTGetIntValue(void* dato) {
int* val = malloc(sizeof(int));
memcpy(val, ((DataObject *)(dato))->valore, sizeof(int*));
return val;
}

Эта функция вызывается этим через указатель функции:

void* adtGetValue(DataObject* dato){
    return (*dato->tipo->get_val)(dato);
}

в главном Я печатаю int и вызываю функцию: *((int *) (adtGetValue(data)))

Это определениеуказателя функции: typedef void* (*ADTGetValue)(void*); и эти две структуры используются в коде

  typedef struct DataType
{
    ADTConstruct costruisci;
    ADTDestruct distruggi;
    ADTGetValue get_val;
    ADTSetValue set_val;
    ADTRandomValue rand_val;
    ADTReadFromKeyboard read_val;
    ADTWriteToMonitor stampa;
    ADTClone clona;
    ADTCompare compara;
} DataType;

typedef struct DataObject
{
    DataType* tipo;
    void* valore;
} DataObject;

Любой совет приветствуется:)

...