есть класс (примерно такой):
class QT_UMLModel{
public:
QT_UMLModel();
void addClass(QString name);
int ClassCount;
QDomElement * ClassItem;
QDomDocument Model;
}
примерный конструктор:
QT_UMLModel::QT_UMLModel(){
ClassCount = 0;
ClassItem = new QDomElement;
}
и метод:
void QT_UMLModel::addClass(QString name){
delete ClassItem;
ClassCount++;
ClassItem = new QDomElement [ClassCount];
}
В этом случае, при вторичном вызове метода addClass происходит след ошибка: "*** glibc detected *** free(): invalid pointer: 0x00000000005a2f18 ***".
но если вместо QDomElement * ClassItem; создать QDomElement ** ClassItem; (соответственно вместо ClassItem = new QDomElement; - ClassItem = new QDomElement *; и вместо ClassItem = new QDomElement [ClassCount]; - ClassItem = new QDomElement * [ClassCount]; память освобождается на ура. к сожалению такой вариант оставить не могу, ибо при попытке сделать в этом же методе (addClass) Model.appendChild(*ClassItem[ClassCount]); прога проваливается в сегфолт (в этом случае есно, я объект Model обнулял).
Единственное рабочее решение это первый вариант с удалением строчки delete "ClassItem;" - тогда все проходит на ура. но тогда возникает опасение memory leak =( (еслиб этот метод вызывался пару раз - может и забил бы, но этот метод будет вызываться часто). Ах да, Qt 4.1.0 и g++ 4.0.2 (вариант обновить g++ пока не рассматриваются, до момента тыкания меня носом в changelog, где сказано что что-то похожее пофиксино =) )
Вотс.... хелп плиз!
Ответ на:
комментарий
от Legioner
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Qt костыль закрытия открытой БД (2015)
- Форум Освобождение памяти (2014)
- Форум освобождение памяти (2017)
- Форум Отложенное освобождение памяти (2016)
- Форум python освобождение памяти (2016)
- Форум [C++] Освобождение памяти (2009)
- Форум Освобождение памяти в libuv (2017)
- Форум Освобождение памяти для BitmapFactory.decodeStream (2015)
- Форум освобождение памяти в python (2008)
- Форум ГТКшные функции - освобождение памяти (2005)