我不明白为什么这段代码中存在内存泄漏。
我需要返回输入值的副本。
在此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;
任何建议都值得赞赏:)