Професионална програма
Loading...
j.petrov_90 avatar j.petrov_90 163 Точки

Привет, Пламен,

Надявам се, че сега си се наспал, че на лекцията май беше дошъл сънчо :D
Ще те помоля другия път да използваш отделението от форума, което е специално за "C++ Аdvanced“ курса.
Enough small talk. По същина:

Три реда делят решението ти от 100/100 на задачата. Имаш memory leak в твоето решение - това е проблема. По условие нямаш право на такова /не че, ако го нямаше в условието е ОК да leak-ваш памет де... :-} /

В скелета на задачата има заложена мина, на която ти си настъпил. Добре е скрита, така че е лесно човек да я пропусне.
В случай във функцията doRun(), която е част от main.cpp-то има динамично заделяне на памет за всяка компания.
Тази памет се прехвърля на твоя клас ArrayOfPointers да бъде менажирана.
Точно тази памет ти си забравил да освободиш в destructor-а си.

//това е твоят destructor
~ArrayOfPointers(){
    delete[] arrayOfPointers;
}
Ти освобождаваш паметта за масива от пойнтъри, но не и паметта зад самите пойнтъри.

//това е твоя destructor с малка добавка от мен
~ArrayOfPointers(){

        //добавих този for-цикъл към твоето решение и задачата ми даде 100/100
        for(size_t i = 0; i < numAdded; ++i){
            delete arrayOfPointers[i];
            arrayOfPointers[i] = nullptr;
        }

    delete[] arrayOfPointers;
}

П.С. Щастлив съм, че стриктно гониш правилото на 3те (The Rule of 3).
т.е. щом имаш destructor си имплементирал и copy-ctor/copy-assignment operator (макар и те да не се ползват в задачата).

Искам само да отбележа, ча имаш няколко грешки там:
1) В copy-ctor си направил една от основните грешки - не си си инициализирал променливите.

//това е твоята имплементация на copy-ctor
    ArrayOfPointers(const ArrayOfPointers& other){
        if(this!=&other){
            delete [] arrayOfPointers;
            numAdded=other.numAdded;
            arrayOfPointers=new Company*[other.numAdded];
            for(size_t i=0;i<numAdded;i++){
                arrayOfPointers[i]=other.arrayOfPointers[i];
            }
        }
    }

2)Ако copy-ctor-а ти някога беше изпълнен щеше да ти гръмне програмата със segmentation fault.
Защо? Защото на реда delete [] arrayOfPointers щеше да извищаш delete на памет, която все още не е заделена.
Как бихме го оправили?
Ами като добавим проверка дали arrayOfPointers != nullptr.
/Забележи, че това пак щеше да гръмне, ако не ти е инициализирана променливата на nullptr/


Жив и здрав ... и с под 500 от 500 до домашното да не съм те видял :)

0
plamen_vihren avatar plamen_vihren 2 Точки

It is a great pleasure to take such chalenge, but sometimes I can not find the correct syntax.

Thank you to everybody, that help me and all colleagues.

It is a great honour when the level of education is good.

Respectfully Plamen Nikolaev

0
Prilder1987 avatar Prilder1987 -1 Точки

Software University is a website that has a post about advanced tasks. You must follow this custom essay services to learn new things related to education. They help people to use their keypad and Syntax correction. You can also make an account on it for use. They also have a Cyrillic keyboard which gives you a 50 % solution of it.

-1