Избегание временной переменной в операторе подстрочного индекса

#visual-c #reference #subscript-operator

#visual-c #ссылка #подстрочный оператор

Вопрос:

У меня есть класс v, который динамически выделяет массив двойных значений. Записи — это указатель на начало этого массива. Интервал позволяет мне пропускать записи, например, если бы я хотел рассматривать только каждую третью запись, интервал был бы равен 3.

 doubleamp; v::operator[] (const int n) {
    return entries[n*spacing]; 
}
  

Этот оператор подстрочного индекса компилируется, но приводит к повреждению кучи. Основываясь на моих поисковых запросах в Интернете, я думаю, что Visual Studio сохраняет результат «записей [n * интервал]» во временном, а затем возвращает ссылку на временное. Повреждение кучи происходит, когда я пытаюсь записать в эту ссылку на освобожденную память.

У кого-нибудь есть идеи по обходному пути?

Ответ №1:

Я думаю, что Visual Studio сохраняет результат «записей [n * интервал]» во временном, а затем возвращает ссылку на временное.

Это неверно. Предполагая, что entries определено как double entries[]; или double* entries , то entries[i] возвращает ссылку и является той ссылкой, которая возвращается вашим оператором подстрочного индекса.

Источник вашей проблемы находится где-то в другом месте. Возможно, из-за того, что она n*spacing находится за пределами массива, или весь массив entries освобождается ко времени обращения к ссылке.

Комментарии:

1. Дальнейшая проверка показала, что записи были недопустимыми. Спасибо K-ballo.