[英]Valgrind memory leak
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();
)。 為什么?
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正在泄漏(請參見上文),或者其析構函數是錯誤的。 同樣,嘗試將任何動態分配的成員保留在智能指針中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.