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();
)泄漏内存。为什么呢?
答案 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;
}
如果是后一种情况,要么意味着整个记录被泄露(见上文),要么它的析构函数是错误的。再次,尝试将任何动态分配的成员保留在智能指针中。