Въпрос относно функций и масиви
Здравейте,
Уточнявам, че говоря конкретно за 2-ра и 3-та задача, от домашното за judge, но предполагам ще имам грешки и за напред.
Описвам едната грешка. Когато изнеса във функция масив и там му променям стойностите на елементите, при компилиране ми дава грешка точно на този ред, където презаписвам стойност в масива. Ако го оставя в int main(), всичко си работи.
Другата грешка е подобна. Когато кода е във функция, този път int, всичко си работи, не дава грешка, но резултата е грешен. Ако го върна в main(), речултата е верен.
Гледах лекцията отново и отново, уж всичко правя както трябва пък явно не е. Не пускам кода тук за да не нарушавам правилата, но някакъв съвет къде може да греша?
Ето кода, поорязох го, но на последната лекция го обяснихте много добре, та едва ли има някой не разбрал как да реши задачата.
Ясно, значи проблемът не е компилационна грешка, а грешка по време на изпълнение - това също е важно.
Грешката, която получаваш, казва, че се опитваш да достъпиш памет, която не е твоя (по-конкретно изглежда сякаш достъпваш адрес 0). Това ме навежда на мисълта, че този vector<vector<int> > arrays няма толкова елементи, колкото смяташ че има.
Тук вече трябва да дебъгваш стъпка по стъпка. Първо хвани и си изпечатай всички стойности на arrays (т.е. изпечатай си входа, след като си го прочел). Виж дали arrays съдържа това, което очакваш, че съдържа като брой елементи. След това до колко стигат b и c (с които достъпваш елементи от arrays в циклите) - дали винаги стойностите им са по-малки от размерите на масивите.
Всъщност отсега виждам къде ти е грешката, като погледнах дефинициите на методите. За ориентир - пробвай да изпечаташ стойностите на arrays в края на inputNumbers (там сигурно ще е вярно), и след това пак ги изпечатай в началото на multiplication. Има ли разлика (изобщо има ли нещо в arrays когато влезеш в multiplication - даже, има ли нещо в arrays между извикването на inputNumbers и multiplication, тоест между 18 и 19 ред)? Масивите се подават по референция винаги, но vector как се подава на функция? inputNumbers върху оригиналния arrays ли работи или върху локално копие на arrays?
Ориентира ли се къде е проблемът?
Така, в inputNumbers на финала всичко си е в arreys, но когато вляза в multiplication и искам да изпечатам arreys ми дава същата грешка.
Дори сега направих нова функция, веднага след nputNumbers да ми изпечата arreys и пак ми дава същата грешка.
Мисля, че се ориентирах. Ще прегледам пак лекцията и ще пробвам да оправя сам проблема. Благодаря за съвета.
Точно. Проблемът ти идва от това, че векторът се приема по копие, не по референция. Все едно да направиш функция swap(int a, int b), вместо функция swap(int& a, int& b). При теб проблемът е едно към едно с този пример.
Успех!
Точно. Проблемът ти идва от това, че векторът се приема по копие, не по референция. Все едно да направиш функция swap(int a, int b), вместо функция swap(int& a, int& b). При теб проблемът е едно към едно с този пример.
Успех!
Готово! Отново благодаря!