Вы здесь

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;
Если в классе есть виртуальные методы так делать нельзя. Выделяй память динамически.

>> выдаваться сообщение "Ошибка сегментации"
Более подробный лог есть? В чем пишешь прогу? или просто юзаешь qmake?

я просто юзаю qmake... причем тут это?! виртуальные методы - методы которые либо могут быть реализованны, либо нет, причем класс можно использовать при нереализованных методах при условии, что вызаваться они не будут! я знаю си! не надо меня учить! проблема вообще состоит в том, что сия программа работала нормально! запускалась, аж несколько раз, а тут через некоторое время бац.. и хрен! Ошибка сегментации - вот весь лог!

gdb в помощь.

подробности:
http://www.anekdot.ru:8083/id/-1041100163/

1. Если ты не создаешь класс динамически не создается таблица виртуальных функции, в итоге работа виртульных функций не коректна, что иногда может вызвать падение программы.
2. Если у тебя в классе чисто виртуальные мотоды, компилятор тебе вообще не даст создать объект это класса. Виртуальные методы будут работать если в базовом они уже определены.
3. Си может ты и знаешь но механизм виртуальных функции это C++.

Чтобы убедиться, что проблема не в системе запусти revdep-rebuild.
Если ничего не найдет, тогда ты не там совета просишь.

http://www.forum.crossplatform.ru/

>1
хотелось бы взглянуть на документ, подтверждающий такое заявление

>2
программа собралась, а значит - не требовалось определять чисто виртуальные функции

4. Что можно сказать, если человек не удосужился посмотреть причину падения. Для этого есть отладчики, core-файл и просто печать на консоль.
К тому же, чужие программы работают и лезть в них от него требуют, а проследить за своей - просто нет желания?

Программирование на С/C++ это не создание скриптов. Подход "так прокатит" и "не особо вникаясь" - не подходит.

Kevol написал:
хотелось бы взглянуть на документ, подтверждающий такое заявление

Мда прошу прощения, сказал лишнего. Меня с универа учили, что класс содержащий хотябы один виртуальный метод должен создаваться динамически. Пролеснул еще разок стандарт, там про это ничего не сказано.

Kevol написал:
программа собралась, а значит - не требовалось определять чисто виртуальные функции

Это я не мог не прокоментировать высказывание:

God_of_gods написал:
...методы которые либо могут быть реализованны, либо нет, причем класс можно использовать при нереализованных методах при условии, что вызаваться они не будут!

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. С него необходимо начинать, прежде чем что-либо спрашивать.

Если не можешь осилить использование gdb, установи qtcreator очень простая среда для разработки приложений с qt. Создай новый проект с использованием модуля opengl и добавь туда свои файлы. И попробуй пошагово отладить прогамму. В qtcreator более менее удобный интерфейс для дебага.

>>программа работала нормально, пока потом не стало просто вылезать сообщение о ошибке сегментации,
Просто так ничего не бывает. pro файл написан ручками или сгенерин qmake'ом? Если сгенерин, то был ли он перегенерин после добавления новых файлов? qmake вызываешь перед каждой компиляцией?

>>короче польза от этого сайта почти нулевая!
Ну коли так, то google.com тебе всегда рад.

Ты видимо действительно ошибся сайтом, тут платную техподдержку не оказывают. Если ты просишь других людей о помощи - будь добр хотя-бы не хамить в ответ, и несколько внимательнее читать их сообщения - они не обязаны вытягивать из тебя информацию нужную для помощи тебе-же, да и ещё выслушивать оскорбления при этом.

То что "сначала работало - потом поломалось" - ты не поверишь, большая часть проблем именно так и начинается.
То что "ошибка сегментирования - вот и весь лог" противоречит твоим-же словам "не смейте учить меня что значит программировать на с/c++... я знаю оба этих языка" лично я вообще не умею программировать, но знаю как заставить программу стать разговорчивее, и это "сообщение об ошибке" ненамного информативнее слов "программа не работает".
С другой стороны реплика "мне ваши советы тут не нужны!" противоречит всей этой ветке - если тебе не нужны советы, зачем ты начинал эту тему на форуме? пожаловаться на плохую жизнь? Тут не кабинет психолога, а технический форум - ныть будешь в другом месте.

В целом, если я увижу подобного тона сообщения от тебя ещё раз - твой аккаунт будет заблокирован, и мы окончательно перестанем мешать тебе жить, хотя судя по темам в которым ты отметился, сайт для тебя не такой уж и бесполезный.