Перекрывающиеся блоки источника и назначения в memcpy с бустом - PullRequest
2 голосов
/ 01 июля 2011

Может кто-нибудь объяснить мне, почему на этом c ++ простом коде valgrind возвращает this .

Первая проблема с boost: regex. Когда я использую subpattern с вопросительным знаком (для необязательного соответствия), valgrind вернет:

Source and destination overlap in memcpy (line 8)

Вторая проблема связана с std :: string :: erase.

Понятия не имею, что я делаю не так.

1 Ответ

1 голос
/ 01 июля 2011

Похоже, что код библиотеки использует memcpy, когда, чтобы быть строго переносимым, он должен использовать memmove.

Для библиотеки компилятора, такой как std :: string, это, вероятно, нормально, так как этот код не должен быть переносимым на другие компиляторы и может использовать знания о том, как работает конкретная реализация.

С буст-библиотекой вам, вероятно, придется поверить, что они также знают, что делают.Библиотека имеет множество конфигураций для разных компиляторов, и может также использовать определенное расширение g ++.

...