Это, безусловно, неверное строковое значение. Использование std :: string может помочь в этом отношении, если это проблема с висящими указателями. Также убедитесь, что все инициализации строки работают как положено.
Если я правильно понимаю класс, вы предполагаете, что любая память, находящаяся в m_cstring, не будет освобождена в течение жизни класса. Что в вашем случае также означает срок службы контейнеров. Проверьте свои возможности.
Другая проблема, с которой вы можете столкнуться, заключается в том, что если ваш Destructor имеет значение , удаляя cstring, а затем используя значение по умолчанию в конструкторе, это действительно плохая идея, поскольку вы будете пытаться освободить статически распределенную cstring. *
В C ++ возможно определить функцию, которая должна возвращать строку, но ничего не возвращает, и вы получите плохую строку (как правило, компилятор поймает «Достигнутый конец не-void функции») , но не всегда).
То же самое касается использования valgrind.
В качестве приложения после прочтения различных комментариев всегда существует вероятность того, что ошибка памяти где-либо еще в программе повредила одну из строк.
РЕДАКТИРОВАТЬ 4-16
В этот момент я бы проверил, что значения объекта правильно сформированы при конструировании / разрушении. (попробуйте распечатать их?) Если все выглядит хорошо, вам, возможно, придется поискать ошибку в другом месте кода.