У меня есть объект для удаления:
XMLDoc = new TXMLDocument(NULL);
но я понятия не имею, как это сделать … это не работает
delete XMLDoc;
XMLDoc->free();
Когда я пытаюсь просто удалить объект, программа вылетает.
Так что это часть моего кода. У меня есть класс:
class C_XMLhandler{
private:
TXMLDocument *XMLDoc;
...
...
public:
void loadXMLfile(String name);
...
...
};
and example declaration of method:
bool C_XMLhandler::loadXMLfile(String name)
{
XMLDoc = new TXMLDocument(NULL);
Box=GetMagicBox(XMLDoc); //it's XML parser method, and it's doesen't matter
delete XMLDoc; //when i reach this line the program scrashes
}
http://docwiki.embarcadero.com/Libraries/XE6/en/Xml.XMLDoc.TXMLDocument.Destroy
Объект удаляется компонентом, к которому он подключен (это), иначе не совсем уверен, я где-то читал, что он автоматически удаляется. (Хммм)
Это потому что ты delete
объект перед вызовом free
метод в теперь удаленном объекте.
Когда вы делаете delete XMLDoc
память, выделенная для XMLDoc
помечается как свободный, и деструктор объекта выполняется. Теперь при использовании указателя в вызове XMLDoc->free()
вы обращаетесь к памяти, которая больше не выделяется, и вы испытываете неопределенное поведение, что несколько раз приводит к краху.
Вы должны сначала проверить, если free
Метод не вызывается внутри деструктора объекта, и если это не так, делайте это наоборот. Если free
вызывается в деструкторе, вам вообще не нужно его вызывать.