С++Advanced,Task_3_Range - защо ми гърми кода на copy-ctor-a?
Здравейте,
не мога да открия защо гърми кода, доста си поиграх, вкарах навсякъде принт на инфото на конзолата, гледах и Call Stack-a, не мога да хвана проблема:
Range::Range(const Range& other) : rangeFirst(other.rangeFirst),
rangeLength(other.rangeLength),
valueCounts(nullptr) {
size_t * newArr = new size_t[other.rangeLength]{};
for (int i = 0; i < other.rangeLength; i++) {
newArr[i] = other.valueCounts[i];
}
this->valueCounts = newArr;
newArr = nullptr;
} //ERROR - тук гърми, при излизане от този скоуп, подаване на вектора за add-ване в main:
allRanges.push_back(r); //ERROR тук гърми
Поздрави!
не бях го видяла, благодаря, но интересно, пак същото, да, чете, принтя ги на всяка стъпка, брейкпонтове сложих на всички методи и проследих, така разбрах че проблемът е преди пушването във вектора, но не мога да хвана от какво точно, ето го: https://pastebin.com/AJjSfkN0
Решението ти е почти готово.
Проблемът идва от една особеност на итератора и по-специално овърлода му на ++ оператора:
Какво ще се случи, ако this->currentValue е било равно на range->rangeFirst + range->rangeLength преди да го инкрементираме и какво ще върне range->getCount(this->currentValue) в този случай?
хм, това са два различни резултата от една функция, единят дава остатъка до края, другият трябва да даде броя на повторенията на съответния индекс, как може да се получи? не дава да се разпише в два варианта заради int, T и size_t; Вариантът с if (countRemaining <= 0) { return едното}иначе{return другото} също не работи, защото се хваща равното; Мислех да обърна реда на запис на елементите, но във втория случай се искат записани стойности, не индекси, как бих могла да оправя проблема?