2013-06-27 220 views
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; 
} 

此功能总是像这样使用:Valgrind的内存泄露

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

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

+0

代码中被剪切的是什么? – hmjd

+0

要么是假阳性,要么是其他地方有泄漏。 – juanchopanza

+1

关于内存泄漏我会信任valgrind,并说你有一个代码路径,它不会删除内存(例如通过异常)。由于缺乏这么多的代码,我们不能告诉你更多,但猜测。并想知道为什么你不使用智能指针,这可能会解决问题... – PlasmaHH

回答

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; 
} 

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