Loading...
kostadink2001 avatar kostadink2001 7 Точки

C++ Advanced - 10_02.IndexedSet. Runtime error в Judge

Здравейте,

Имплементирах структурата от втора задача в един .cpp файл и когато тествам задачата локално, нулевите тестове минават, но като кача .cpp файла judge ми изкарва Runtime error и ми дава 0/100, нулевите тестове също гърмят, явно в Judge не може да се компилира.Въпроса ми е защо не се компилира кода ми в Judge, да не би нещо да не съм разбрал добре условието и да е грешно имплементирана структурата?

Имплементация на IndexedSet

Тагове:
0
C++ Programming
Jovanna avatar Jovanna 186 Точки
Best Answer

Здравей,

прехвърли си кода на Code::Blocks, компилирай и пробвай от там да изпратиш zip-a.

Прегледай тази тема: Compile time error в Judge от Visual Studio

0
11/11/2018 01:55:13
kostadink2001 avatar kostadink2001 7 Точки

Здравей,

Прехвърлих кода на Code::Blocks, сложих и един nullptr в конструктура, компилирах го и си тръгна локално, но като го качих .cpp файла в Judge отново гръмна с Runtime Error.

0
kostadink2001 avatar kostadink2001 7 Точки

Kакто и да е, тръгна и ми даде 100/100, просто явно не е добра опция да копирам съдържанието на файла от Visual Studio директно в Code::Blocks. Реших я наново този път директно в Code::Blocks и проработи.

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

Отговорът на Jovanna е правилен, проблемът ти е, че не инициализираш valuesArray, което означава, че то има някаква недефинирана (произволна) стойност, която ти се опитваш да достъпиш, без да е твоя. Ако в конструктора го инициализираш с nullptr, останалата ти логика ще засече, че трябва да му запълни стойностите (ще влезеш в if (valuesArray == nullptr) ... )

Ако си пробвал и не ти работи, провери дали не си объркал submit-а (да си предал стария файл, вместо този с корекциите) или нещо друго да си объркал. Аз пробвах точно това, без никакви други промени (тоест промених ти default constructor-ът да изглежда така IndexedSet::IndexedSet() : valuesArray(nullptr) {} ) и предадох и решението ти взе пълни точки.

Също, това което имаш като грешка не е компилационна грешка, както описваш първоначално във въпросът си. Ако беше компилационна, щеше да ти пише Compile time error. Сега си имаш изпълнение на тестове, просто всеки от тях е гръмнал с runtime error. Тоест няма смисъл да пробваш да компилираш под codeblocks - задачата ти се компилира, смяната на компилатора няма да промени много, проблемът е в изпълнението. Почти винаги когато имаш грешки в judge, а ти върви при теб, значи имаш или превишен лимит на памет, или достъпваш памет, която не е твоя (второто по-често). Напълно недостатъчно е в такива ситуации да пробваш само нулевите тестове - трябва да се хванеш и да пишеш примерни тестове, включително и големи такива. Дори е най-добре да си напишеш друга програма, която да ти генерира примерни входни и изходни данни - на изпита надали ще имаш за това време, но на домашните имаш, и е добра практика да свикнеш да тестваш детайлно. Така най-вероятно щеше да хванеш грешката и сам.

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

Поздрави,

Жоро

2
Jovanna avatar Jovanna 186 Точки

хехее имаше един слайд на Жоро с една сърдита котка, мисля, дето казваше: "Инициализирайте си променливите", един единствен nullptr за дифолтния ctor и всичко е ок

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