簡體   English   中英

Valgrind內存泄漏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM