opengl
начал писать прогу на QT с использованием opengl! сначала работала, но потом стало выдаваться сообщение "Ошибка сегментации" при попытке запустить прогу! ошибок с использованием памяти нету, программа вообще простая, класс наследует QGLWidget, переписывает три виртуальные функции (initializeGL, resizeGL,painGL)...
----Файл 1----
#ifndef mrzlb1qt_h
#define mrzlb1qt_h
#include
class mrzlb1qt:public QGLWidget
{
protected:
virtual void initializeGL();
virtual void resizeGL(int w,int h);
virtual void paintGL();
public:
mrzlb1qt();
};
#endif
----Файл 2----
#include "mrzlb1qt.h"
mrzlb1qt::mrzlb1qt()
{}
mrzlb1qt::initializeGL()
{
qglClearColor(0xffffffff);
}
mrzlb1qt::resizeGL(int w,int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0,0,(GLint)w,(GLint)h);
glOrtho(0,100,0,100,-1,1);
}
mrzlb1qt::paintGL()
{}
----Файл 3----
#include
#include "mrzlb1qt.h"
int main(int c,char**p)
{
QApplication a(c,p);
mrzlb1qt m;
m.show();
return a.exec();
}
только не игноируйте! программа сначала рабала, я так обрадовался, что здесь в лине все проще винды, а через нетороевремя тока сообщение "Ошибка сегментации" вместо запуска программы
- Для комментирования войдите или зарегистрируйтесь
>> mrzlb1qt m; Если в классе
>> mrzlb1qt m;
Если в классе есть виртуальные методы так делать нельзя. Выделяй память динамически.
>> выдаваться сообщение "Ошибка сегментации"
Более подробный лог есть? В чем пишешь прогу? или просто юзаешь qmake?
я просто юзаю qmake... причем
я просто юзаю qmake... причем тут это?! виртуальные методы - методы которые либо могут быть реализованны, либо нет, причем класс можно использовать при нереализованных методах при условии, что вызаваться они не будут! я знаю си! не надо меня учить! проблема вообще состоит в том, что сия программа работала нормально! запускалась, аж несколько раз, а тут через некоторое время бац.. и хрен! Ошибка сегментации - вот весь лог!
gdb в помощь.
gdb в помощь.
подробности:
http://www.anekdot.ru:8083/id/-1041100163/
1. Если ты не создаешь класс
1. Если ты не создаешь класс динамически не создается таблица виртуальных функции, в итоге работа виртульных функций не коректна, что иногда может вызвать падение программы.
2. Если у тебя в классе чисто виртуальные мотоды, компилятор тебе вообще не даст создать объект это класса. Виртуальные методы будут работать если в базовом они уже определены.
3. Си может ты и знаешь но механизм виртуальных функции это C++.
Чтобы убедиться, что проблема не в системе запусти revdep-rebuild.
Если ничего не найдет, тогда ты не там совета просишь.
http://www.forum.crossplatform.ru/
>1 хотелось бы взглянуть на
>1
хотелось бы взглянуть на документ, подтверждающий такое заявление
>2
программа собралась, а значит - не требовалось определять чисто виртуальные функции
4. Что можно сказать, если человек не удосужился посмотреть причину падения. Для этого есть отладчики, core-файл и просто печать на консоль.
К тому же, чужие программы работают и лезть в них от него требуют, а проследить за своей - просто нет желания?
Программирование на С/C++ это не создание скриптов. Подход "так прокатит" и "не особо вникаясь" - не подходит.
Kevol написал(а): хотелось бы
Мда прошу прощения, сказал лишнего. Меня с универа учили, что класс содержащий хотябы один виртуальный метод должен создаваться динамически. Пролеснул еще разок стандарт, там про это ничего не сказано.
Это я не мог не прокоментировать высказывание:
не смейте учить меня что
NightNord: [censored]
"1. Если ты не создаешь класс динамически не создается таблица виртуальных функции, в итоге работа виртульных функций не коректна, что иногда может вызвать падение программы."
что динамически создавай, что не динамически, все равно ошибка сегмнтации вылезает... я уже писал, что виртуальные методы - методы, чья реализация не обязательна, если класс, имеющий их, не будет в процессе работы к ним обращаться! у меня виртуальные методы унаследованы и реализованны, динамически или не динамически создан класс - значения не имеет! факт - программа работала нормально, пока потом не стало просто вылезать сообщение о ошибке сегментации, хотя в коде ничего не менялось
"3. Си может ты и знаешь но механизм виртуальных функции это C++."
когда говорю о си, то подрахумеваю и си++, не имеет особой разницы обзову я это си, си++ или си/си++, тебе просто делать нечего, умного предложить не можешь, решил к словам попридираться!
"4. Что можно сказать, если человек не удосужился посмотреть причину падения. Для этого есть отладчики, core-файл и просто печать на консоль.
К тому же, чужие программы работают и лезть в них от него требуют, а проследить за своей - просто нет желания?"
на консоль выводится только "Ошибка сегментации"...иной информации нету!
с этим OpenGL всегда гимороя больше чем положительного результата, что на Visual Studio с ним работал, что теперь тут!
короче польза от этого сайта почти нулевая!
NightNord: еще одно заявление в подобном стиле и вы отправитесь в перманентный бан, за наглость и хамство.
.
>> короче польза от этого сайта почти нулевая!
вот эти две ссылки
http://www.gentoo.ru/user/10199/track
http://www.gentoo.ru/user/10199/track?page=1
опровергают ваше категоричное высказывание
Тема "Отладка программ" не является центральной темой этого сайта.
Но иногда и она проскальзывает, и на этом сайте помогают.
Это подпись, которую невозможно истолковать неправильно
темы то эти есть! но если
темы то эти есть! но если внимательно их просмотреть, то лишь на малую часть заданных мной вопросов (причем довольно простых) я получил ответы, остальное лишь вокруг да около...
.
Ну давайте по шагам.
/examples/opengl/glwidget.cpp
/examples/opengl/textures/glwidget.cpp
у вас не падает с теми же симптомами?
какая у вас версия qt?
трассировали ли вы свою программу?
из среды разработки пробовали её запускать?
выполнять по шагам?
ставить точки останова?
"Ошибка сегментации - вот весь лог!" - этого ведь нам недостаточно.
Вот представьте, вам кто-то хочет помочь.
Он хочет узнать у вас больше информиции.
А вы ему - "Ошибка сегментации - вот весь лог!"
Тогда в ответ: "Надо искать, в чём ошибка - вот и весь ответ!"
Это подпись, которую невозможно истолковать неправильно
Вам уже 2-жды назвали gdb. С
Вам уже 2-жды назвали gdb. С него необходимо начинать, прежде чем что-либо спрашивать.
Если не можешь осилить
Если не можешь осилить использование gdb, установи qtcreator очень простая среда для разработки приложений с qt. Создай новый проект с использованием модуля opengl и добавь туда свои файлы. И попробуй пошагово отладить прогамму. В qtcreator более менее удобный интерфейс для дебага.
>>программа работала нормально, пока потом не стало просто вылезать сообщение о ошибке сегментации,
Просто так ничего не бывает. pro файл написан ручками или сгенерин qmake'ом? Если сгенерин, то был ли он перегенерин после добавления новых файлов? qmake вызываешь перед каждой компиляцией?
>>короче польза от этого сайта почти нулевая!
Ну коли так, то google.com тебе всегда рад.
ого-го, какие мы гордые!
Ты видимо действительно ошибся сайтом, тут платную техподдержку не оказывают. Если ты просишь других людей о помощи - будь добр хотя-бы не хамить в ответ, и несколько внимательнее читать их сообщения - они не обязаны вытягивать из тебя информацию нужную для помощи тебе-же, да и ещё выслушивать оскорбления при этом.
То что "сначала работало - потом поломалось" - ты не поверишь, большая часть проблем именно так и начинается.
То что "ошибка сегментирования - вот и весь лог" противоречит твоим-же словам "не смейте учить меня что значит программировать на с/c++... я знаю оба этих языка" лично я вообще не умею программировать, но знаю как заставить программу стать разговорчивее, и это "сообщение об ошибке" ненамного информативнее слов "программа не работает".
С другой стороны реплика "мне ваши советы тут не нужны!" противоречит всей этой ветке - если тебе не нужны советы, зачем ты начинал эту тему на форуме? пожаловаться на плохую жизнь? Тут не кабинет психолога, а технический форум - ныть будешь в другом месте.
В целом, если я увижу подобного тона сообщения от тебя ещё раз - твой аккаунт будет заблокирован, и мы окончательно перестанем мешать тебе жить, хотя судя по темам в которым ты отметился, сайт для тебя не такой уж и бесполезный.