crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Где утекает память?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Antiglobalist Дата 10.5.2011, 21:09
  Место утечки нашел(Метод Разметка)
Раскрывающийся текст
QVector<QGraphicsItem *> vec;

void MainWindow::Razmetka(double a, double b, double c, double d)
{
    while(!vec.empty()){
        scene->removeItem(vec.at(0));
        vec.pop_front();
    }
    ..............
        text=scene->addText(t.toString(),f);text->setPos(QPointF(0,600-i*30)+pog);vec.append(text);
    }
}


Заменил scene->removeItem(vec.at(0)); на delete vec.at(0);

На счет NULL проверок , да можно убрать если в конструкторе указатели приравнять к NULL , иначе ошибка.
Всем Спасибо =)
Litkevich Yuriy Дата 10.5.2011, 17:03
 
Цитата(Гость_Денис_* @ 10.5.2011, 17:46) *
Думаю на delete , он удаляет память на которую указывает указатель ?
конечно
Rocky Дата 10.5.2011, 15:55
  На NULL можно не проверять.
Цитата
C++ guarantees that operator delete checks its argument for null-ness. If the argument is 0, the delete expression has no effect. In other words, deleting a null pointer is a safe (yet useless) operation. There is no need to check the pointer for null-ness before passing it to delete:


if (p) // useless; delete already checks for a null value
delete(p);


Тут вероятно что-то не так внутри класса, наследуемого от QGraphicsItem. Если в этом цикле убрать все, кроме создания/удаления объектов класса, что будет? И наоборот. Тут методом исключения - и сразу будет ясно что к чему.
RazrFalcon Дата 10.5.2011, 15:10
  А без проверки на NULL утечка есть?
Денис Дата 10.5.2011, 14:46
  (Зациклил кусок мэйна и получил не хилую утечку)
Код в мэйне
Раскрывающийся текст
  
        fx,px ... указатели на объекты класса наследуемого от QGraphicsItem .
        Razmetka(ui->doubleSpinBoxA->value(),ui->doubleSpinBoxB->value(),ui->doubleSpinBoxC->value(),ui->doubleSpinBoxD->value());
        if(fx!=NULL)delete fx;
        fx=new Graphic();
        if(f1x!=NULL) delete f1x;
        f1x=new PrGraphic();
        if(Px!=NULL) delete Px;
        ...
        scene->addItem(fx);
        scene->addItem(P1x);
        scene->addItem(Px);
        scene->addItem(Rx);
        scene->addItem(f1x);


Метод Разметка
Раскрывающийся текст
while(!vec.empty()){
        scene->removeItem(vec.at(0));
        vec.pop_front();
    }
...
text=scene->addText(t.toString(),f);
text->setPos(QPointF(i*30,600)+pog);
vec.append(text);

В классах от QGr... динамически не выделяю ни под чего.
Думаю на delete , он удаляет память на которую указывает указатель ?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:46