unsigned short* myClass::get_last(size_t _last) const
{
if (_last == 0) _last = last.size();
if (_last <= last.size())
{
unsigned short* temp = new unsigned short [_last] {};
while (_last > 0) temp[_last] = last[last.size() - _last--]; //I get a warning HERE
return temp;
}
throw std::runtime_error("Error!");
}
Там написано:
Переполнение буфера при записи в 'temp': размер записи составляет '_last * 2' байтов, но может быть записано '_last' байтов.
Что это значит? Я точно знаю, что _last не больше, чем temp.size () из-за if
, что мне делать?
Он отлично работает во время выполнения , но я ненавижу иметь предупреждения, которые делают мой код менее понятным для другого пользователя или для меня в будущем.
РЕДАКТИРОВАТЬ: _last - это аргумент, данный пользователем во время выполнения, так что в конечном итоге оно может иметь любое значение, но если его значения выходят за пределы диапазона, вы получаете исключение (управляемое в другой функции).
Вектор, который я упомянул в заголовке, - last То есть член myClass .
Я знаю, что элементы массива go от 0 до _last - 1 , и именно поэтому я уменьшаю _last , прежде чем использовать его в первый раз (как вы, вероятно, знаете, ассоциативность назначений справа налево).
Надеюсь, я ответил на все ваши комментарии ;)