Добрый день. С вами в эфире снова странные истории про std::vector. Изложу суть проблемы в том виде, в котором я ее понимаю сейчас:
Есть класс, в нем есть std::vector<float> в разные места которого периодически нужно писать данные. Вектор потихоньку растет со временем и, по некоторым причинам, реальное смещение в нем пользователю неизвестно. Поэтому есть функция, которая дает способ манипулировать конкретным элементом вектора и его соседями. Изначально ее прототип выглядел как float* f(uint32_t virt_off).
Однако, я обнаружил, что в один прекрасный момент эта функция начинала возвращать 0. Поотлаживавшись, я понял, что дело в том, что
vec.data() + off начинает возвращать не _указатель_ на элемент, а его _значение_. Т.е. если вектор инициализируется через vec.insert(..., 0.0f), возвращается 0.0, если через 1.0f — 1.0. Причем, происходит это далеко не сразу и строго в определенный момент, что я вижу по значению virt_off.
То же самое происходит, если получать указатель через &vec[off] и даже если возвращать итератор вида vec.begin() + off.
Нагуглить ничего не получилось, буду признателен за все идеи о возможных причинах подобного поведения или указание на профильный чатик по плюсам, поскольку проблема не очень профильная. Linux Mint 19.3, G++ 7.5.0