Как избежать временной переменной в операторе подписки
У меня есть класс v, который динамически выделяет массив двойников. Записи - это указатель на начало этого массива. Интервал позволяет мне пропускать записи, например, если бы я хотел рассмотреть только каждую третью запись, интервал был бы равен 3.
double& v::operator[] (const int n) {
return entries[n*spacing];
}
Этот оператор индексации компилируется, но вызывает повреждение кучи. Основываясь на моих поисках в Интернете, я думаю, что Visual Studio сохраняет результат "records[n*spacing]" во временном хранилище, а затем возвращает ссылку на временный. Повреждение кучи происходит, когда я пытаюсь записать в эту ссылку освобожденную память.
У кого-нибудь есть идеи для обхода?
1 ответ
Я думаю, что Visual Studio сохраняет результат "records[n*spacing]" во временном хранилище, а затем возвращает ссылку на временный.
Это неверно. Если предположить, entries
определяется как double entries[];
или же double* entries
, затем entries[i]
возвращает ссылку и является той ссылкой, которая возвращается вашим оператором индекса.
Источник вашей проблемы в другом месте. Возможно в n*spacing
находясь за пределами массива, или весь entries
освобождается к моменту обращения к ссылке.