Проблема в том, что вы берете указатель на элемент в векторе:
s2s.at(propIndex).s1 = &s1s.at(index);
Вектор является динамической c структурой, и его данные могут быть перераспределены, когда он растет. Таким образом, любой push_back()
может сделать недействительными все указатели:
s1s.push_back({ .index = i, .data= {} });
Обратите внимание, что алгоритм распределения векторов предназначен для резервирования пространства для нескольких элементов, когда его необходимо увеличить. Это объясняет, что проблема появляется только время от времени.
Одним из решений может быть сохранение не указателя, а индекса элементов вместе с указателем на вектор.