Russian Qt Forum
Сентябрь 30, 2024, 14:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Наследование. Segmentation fault  (Прочитано 22744 раз)
BRE
Гость
« Ответ #15 : Декабрь 08, 2008, 14:42 »

Такой еще вопрос. У smartQuery деструктора не описан, при его разрушении dbg не удаляется?
Записан
MechanicalBear
Гость
« Ответ #16 : Декабрь 08, 2008, 15:10 »

нет. я пробовал создавать dbg объектом, а не указателем. та же песня.
Записан
BRE
Гость
« Ответ #17 : Декабрь 08, 2008, 15:38 »

нет. я пробовал создавать dbg объектом, а не указателем. та же песня.
У меня не получается смоделировать segfault в тестовом примере. Если у тебя получиться это сделать, сбрось архив с проектом.
Записан
MechanicalBear
Гость
« Ответ #18 : Декабрь 08, 2008, 16:01 »

ок. завтра. щас домой. спасибо за помощь!
Записан
MechanicalBear
Гость
« Ответ #19 : Декабрь 09, 2008, 07:38 »

Код:
class Huis
{
        smartQuery sq;
public:
        void helo();
};

void Huis::helo()
{
        smartQuery sq2;

        sq.addKey("k");
        sq.addKey("value");
        sq.select("org");

        while (sq.next())
                qDebug() << sq.value(1).toString();
}

int main(int argc, char ** argv)
{
...
        Huis h;
        h.helo(); // это работает

        Huis *x;
        x->helo(); // это нет
...
}
Записан
BRE
Гость
« Ответ #20 : Декабрь 09, 2008, 08:46 »

А объект создавать кто будет?

Код:
int main(int argc, char ** argv)
{
...
        Huis h;
        h.helo();

        Huis *x = new Huis;
        x->helo();
...
}
Записан
MechanicalBear
Гость
« Ответ #21 : Декабрь 09, 2008, 09:04 »

А объект создавать кто будет?

Код:
int main(int argc, char ** argv)
{
...
        Huis h;
        h.helo();

        Huis *x = new Huis;
        x->helo();
...
}

Код:
Huis *x = new Huis;
Код:
Huis *x;
x = new Huis;
я чето не догоняю?
Записан
BRE
Гость
« Ответ #22 : Декабрь 09, 2008, 09:09 »

я чето не догоняю?
В приведенном тобой выше примере, ты объявляешь указатель на Huis и сразу начинаешь его использовать, без создания самого объекта.
Записан
MechanicalBear
Гость
« Ответ #23 : Декабрь 09, 2008, 09:13 »

я чето не догоняю?
В приведенном тобой выше примере, ты объявляешь указатель на Huis и сразу начинаешь его использовать, без создания самого объекта.

объект объявлен и сразу инициирован при помощи new. ты точно уверен что это может являться причиной?
Записан
BRE
Гость
« Ответ #24 : Декабрь 09, 2008, 09:17 »

Код:
int main(int argc, char ** argv)
{
...
        Huis *x;
        x->helo(); // это нет
...
}

объект объявлен и сразу инициирован при помощи new. ты точно уверен что это может являться причиной?
Смотри, здесь объявлен указатель на объект Huis, сам объект еще не создан. Что-бы использовать указатель ему нужно присвоить валидное значение.
Записан
MechanicalBear
Гость
« Ответ #25 : Декабрь 09, 2008, 09:20 »

А объект создавать кто будет?

Код:
int main(int argc, char ** argv)
{
...
        Huis h;
        h.helo();

        Huis *x = new Huis;
        x->helo();
...
}

сразу посмотрел в твой пост и не обратил внимания на свой. сорри.
щас разберусь с основным проектом.
тестовый работает.. почему??
Записан
BRE
Гость
« Ответ #26 : Декабрь 09, 2008, 09:27 »

тестовый работает.. почему??
А тут может быть, что угодно.  Улыбающийся
Где-то, что-то делаешь не так в основном проекте, не видя всего трудно что-то сказать определенное.
Ошибка может быть не обязательно в этом классе.
Записан
MechanicalBear
Гость
« Ответ #27 : Декабрь 09, 2008, 09:28 »

Код:
  3 smartQuery::smartQuery  ( QSqlResult * result ) : QSqlQuery(result)
  4 {
  5     dbg.sql("Constructor by result");
  6 }
  7 smartQuery::smartQuery  ( const QString &str, QSqlDatabase db ) : QSqlQuery(str, db)
  8 {
  9     dbg.sql("Constructor by string and database");
 10 }
 11 smartQuery::smartQuery  ( QSqlDatabase db ) : QSqlQuery(db)
 12 {
 13     dbg.sql("Constructor by database");
 14 }
 15 smartQuery::smartQuery  ( const QSqlQuery & q ) : QSqlQuery(q)
 16 {
 17     dbg.sql("Constructor by query");
 18     *this = (const smartQuery&)q;
 19 } 
 20 smartQuery::smartQuery (const smartQuery & q)
 21 { 
 22     dbg.sql("Constructor by smartQuery");
 23     *this = q;
 24 } 
 25   
 26 smartQuery& smartQuery::operator= ( const smartQuery& q)
 27 {     
 28     dbg.sql("operator = smartQuery");
 29     query = q.query;
 30     order = q.order;
 31     keys = q.keys;
 32     values = q.values;
 33     *((QSqlQuery*)this) = (const QSqlQuery&)q;
 34     return *this;
 35 }
 36   
 37 smartQuery::~smartQuery()
 38 { 
 39     dbg.sql("destructor");
 40 }
на консоль выводит
Код:
Constructor by string and database
и всё равно рушится.
что делать с конструкторами? %(
Записан
BRE
Гость
« Ответ #28 : Декабрь 09, 2008, 09:43 »

Пока я не смогу это воспроизвести у себя, трудно что-то сказать.
Покажи класс который использует smartQuery. Может там что-то. И заодно полностью покажи (h и cpp) smartQuery, в текущем виде.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #29 : Декабрь 09, 2008, 19:04 »

Выложи полный проект, в котором сегфолтица, не мучай людей догадками.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.