为什么在返回malloc指针时valgrind会显示“泄漏肯定丢失”警告?

时间:2019-04-14 22:09:49

标签: c function-pointers valgrind void-pointers

我不明白为什么这段代码中存在内存泄漏。

我需要返回输入值的副本。

在此valgrind显示警告“ 1个块中的8个字节肯定在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;

任何建议都值得赞赏:)

0 个答案:

没有答案