瓦尔格林德内存泄漏

Valgrind memory leak

本文关键字:内存 泄漏 林德      更新时间:2023-10-16
Record* MyClass::get_record (int id)
{
    Record* rec = new Record();
    Record* compressed_rec;
    /* ... code that gets compressed_rec into memory ... */
    compressed_rec->decompress(rec);
    return rec;
}

此函数始终按如下方式使用:

Record* rec = my_class_instance.get_record (id);
show_contents_of(rec);
delete rec;

valgrind说我在第一行(Record* rec = new Record();(泄漏了内存。为什么?

瓦尔格林德说我在第一行泄漏了内存(记录* rec = new Record((;)。为什么?

它是否表明Record本身正在泄露,或者Record::Record内部分配的其他内容?

如果是前者,则来自MyClass::get_record的某些返回路径会泄漏它,或者调用方会泄漏它。切换到使用智能指针将解决这两种情况:

std::unique_ptr<Record> MyClass::get_record (int id)
{
    std::unique_ptr<Record> rec(new Record());
    ...
    return rec;
}

如果是后一种情况,则意味着整个记录正在泄露(见上文(,或者其析构函数有问题。同样,尝试将任何动态分配的成员保留在智能指针中。