Найденное решениеОшибка памяти Weird C++. Const указатель изменяется
Описание проблемы: я использовал старую библиотеку C и имела класс, который получал константный символ * в качестве аргумента в функции. Эта функция создавала динамический объект и сохраняла его в связанном списке, используя const char * в качестве аргумента.
Проблема заключалась в том, что после этого const char *, который был передан функции, был изменен в памяти за пределами класса. Это уничтожило данные в узле.
Используйте std :: string как типы данных в классах. Когда const char * передается в строку как значение, строка берет на себя управление памятью для вас.
Что я узнал? При использовании C++ всегда используйте Strings и ТОЛЬКО используйте char * с string.c_str(), если это необходимо в некоторой библиотеке C.
Спасибо, ребята. Вы спасли мои выходные.
Можете ли вы придумать гораздо меньший пример, демонстрирующий ту же проблему? Код, который вы связали, слишком велик для нас, чтобы выяснить, что с ним не так ... – Xymostech
Попробуйте использовать valgrind. – mfontanini
В этом случае ваш вопрос должен быть автономным, а не ссылкой на какой-либо внешний веб-сайт. Поэтому вам действительно нужно обрезать свой код и опубликовать соответствующий фрагмент, предпочтительно подходящий SSCCE (http://sscce.org). – hyde