Valgrind内存泄漏

时间:2013-06-27 07:58:01

标签: c++ memory-leaks valgrind

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

1 个答案:

答案 0 :(得分: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;
}

如果是后一种情况,要么意味着整个记录被泄露(见上文),要么它的析构函数是错误的。再次,尝试将任何动态分配的成员保留在智能指针中。