Я использую STL string
в приложении моего, и я недавно тестировал его на утечки памяти, и я заметил, что многие мои строки не были должным образом освобождены до конца программы.Утечки памяти строк C/C++?
я тестировал следующий код (не дословно) с одной из строк:
const string* cppString = &obj->objString;
const char* cString = cppString->c_str();
delete obj;
После этого я поставил брейк-пойнт и заметил, что, в то время как string
что cppString
не указал больше не существует, cString
все еще указывал на строку стиля C, которая, безусловно, была той, которая не была освобождена в конце.
Я пропустил что-то в терминах того, как работают строки C/C++? Как я могу получить представление C строки, которую нужно освободить?
EDIT: Дополнительная информация. Мой класс obj
имеет тип Dialog
, который наследует Popup
. Я думал, что это могло быть, поскольку, когда я удаляю obj
, я рассматриваю его как Popup*
, но я попробовал его в небольшой отдельной программе, и удаление в качестве родительского класса правильно удаляет дочерние переменные-члены (что имеет смысл , конечно).
Я использовал трассировку утечки памяти в VS, и это показывает, что строка, которая закончилась утечкой, была той, которая была создана, когда я сделал Dialog
и установил objString
в строку, переданную как ссылка на конструктор.
Спасибо,
Jengerer
(К сожалению, мой предыдущий комментарий был связан с ошибкой при чтении приоритета оператора). Я думаю, вам нужно показать больше кода. Не видя определения 'obj' и того, как его выделить, трудно предположить, будет ли' obj-> objString' корректно освобожден. –
Это похоже на беспорядок здесь, поэтому я собираюсь обновить OP своим комментарием. – Jengerer
Имеет ли 'Popup' виртуальный деструктор? –