Loading...
l000p avatar l000p 13 Точки

Memory leak - може би ?? Task 5 - List SOLVED

Здравейте, имам затруднения с 5-та задача от домашното, наистина нямам идея от къде ми се натрупва памет и ще съм благодарен ако някой ме насочи в правилната посока. 
Предполагам че трябва да използвам smart pointer-и, но ми се иска да получа решение спрямо кода който съм написал. 

Решение: https://pastebin.com/eSgkfMPp - Получавам над 10 MB след тест 4... lameee ...

Тагове:
0
C++ Advanced 08/02/2020 00:01:04
galin_kostadinov avatar galin_kostadinov 166 Точки
Best Answer

Привет!

Може да погледнеш следните неща:

1. void List::addAll(const List& other){...}

Тук се иска да копираш стойностите от едини лист в другия, както е направено в момента ти правиш единия лист да ти е равен на другия по референция. Трябва да вземеш стойностите(values) една по една от other и да ги добавиш в настоящия лист, в него може да има стойности, като те се запазват.

 

2.  void List::removeFirst()

Предлагам ти следният вариант, макар че в случая и така рабати, то първо нищо не правиш по отношение на tail пойнтъра, ако имаш 0 елемента трябва да ти сочи към nullptr, другото е, че в момента не си сетнал предишния елемент на head да ти е nullptr, а сочи към освободена памет. :

void List::removeFirst() {
    if (size == 1) {
        delete this->head;
        this->head = nullptr;
        this->tail = nullptr;
        this->size--;
    } else if (size > 1) {
        Node *toDelete = this->head;
        this->head = this->head->getNext();
        this->head->setPrev(nullptr);
        delete toDelete;
        this->size--;
    }
}

 

3. List& List::operator=(const List& other)

Тук не освобождаваш паметта на настоящият обект, ако преди това е била заделена такава. Това си е memory leak

 

Поздрави!

1
l000p avatar l000p 13 Точки

Благодаря ! 

Facepalm-а след като прочетох последната точка беше епичен -_- 

On-topic: Някъде мога ли да намеря tool за проверка на memory leaks в дадена програма? Намерих Valgrind, който може да се използва на Linux, за съжаление аз работя в Windows среда, опцията е или да прекарам програмата през Wine или да намеря алтернатива на Valgrind ? По възможност open source. 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.