0
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();) 上泄漏了内存。为什么?

4

1 回答 1

0

valgrind 说我在第一行泄漏了内存 (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;
}

如果是后一种情况,要么意味着整个 Record 被泄露(见上文),要么它的析构函数有问题。同样,尝试将任何动态分配的成员保存在智能指针中。

于 2013-06-27T09:02:09.910 回答