Loading...
niagara avatar niagara 22 Точки

C++ Advanced - 07. Destructors, Constructors and Copy Assignment - Task 1 - Register

Здравейте, осъзнавам, че сигурно е очеизвадно, но в момента съм напълно забила и не мога да разбера, защо ми гърми кодът и по - точно add метода: https://pastebin.com/JSQjZxu3   Моля някой да ми разясни. Благодаря предварително.

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки
Best Answer

Здравей,

Провери ли стойностите на полетата на обекта, когато гръмне add метода? С кои променливи/полета работиш в add метода и какви могат да бъдат стойностите им, за да гръмне? На кое изпълнение на този add метод гърми, на първия ли? Ако е на първия, какво ти казва това за състоянието на обекта? Коя част от кода е отговорна за задаването на началното състояние (стойности на полета) на един обект?

Пробвай да си отговориш на тези въпроси и мисля, че ще се ориентираш къде е проблемът. Ако нещо те спъва, пиши пак :)

Поздрави,

Жоро

0
niagara avatar niagara 22 Точки

Предполагам, че проблемът идва от конструктора и по точно стойността на companiesArray, но какво трябва да е първоначалното му състояние не съм сигурна.

0
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Правилно - companiesArray не е инициализиран, и като се опитваш да достъпиш елемент на определен индекс, получаваш грешка (по-точно недефинирано поведение), защото достъпваш памет, която не е твоя.

Значи това поле companiesArray е указател, който се ползва като масив. Целият проблем е в това, че този масив не е инициализиран - не е заделена памет за него. Ти даже знаеш, че това трябва да е масив, защото правилно го освобождаваш в деструктора - delete[] companiesArray. Щом така го освобождаваш, как трябва да го заделиш в конструктора? Размерът му също го знаеш - затова имаш параметър в конструктора за броят компании, ако видиш как се ползва класа, ще видиш, че това число е общата бройка компании, които ще бъдат прочетени.

1
niagara avatar niagara 22 Точки

Забила съм тотално. Знам, че структурата за масив е: new T[size] {initializer list}, но не знам какво да правя с инициализационния списък:

Company* companiesArray = new Company[numCompanies] {};

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