#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.