Софтуерно Инженерство
Loading...
+ Нов въпрос
kostadink2001 avatar kostadink2001 6 Точки

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

Здравейте,

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

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

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

Здравей,

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

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

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

Здравей,

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

0
kostadink2001 avatar kostadink2001 6 Точки

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

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

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

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

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

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

Поздрави,

Жоро

2
Jovanna avatar Jovanna 166 Точки

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

1
11/11/2018 03:04:03