assertion failed bei gtkmm beispielprogramm
-
hallo,
ich bin gerade dabei mich durch die gtkmm tutorials durchzuarbeiten und bekomme beim ausfuehren eines bestimmten beispiel-programms eine boese assertion failed message von visualc++(2003).
die fehler-message-box listet die datei dbgdel.cpp (zeile 52).
ich habe beim googeln einiges zu diesem fehler gefunden, jedoch keine loesungsmoeglichkeit. angeblich soll dies passieren wenn ein null pointer freigegeben werden soll, oder ein bereits freigegebener pointer nochmalig freigegeben werden soll.
da es sich um ein tutorial handelt und ich mir sicher bin dass ich gtkmm richtig installiert habe, frage ich mich, ob es an irgendeiner fehlenden visualc++ einstellung liegt!?!
hier das "kleine" prograemmchen:
(meine aufrufliste beim debugen zeigt mir im aufrufstack:gtkmmtest.exe!operator delete(void * pUserData=0x00c16938) gtkmmtest.exe!Cairo::RefPtrCairo::Context::unref()
gtkmmtest.exe!Cairo::RefPtrCairo::Context::~RefPtrCairo::Context()
gtkmmtest.exe!MyArea::on_expose_event(_GdkEventExpose * event=0x0012fb68)file myarea.h
#ifndef GTKMM_EXAMPLE_MYAREA_H #define GTKMM_EXAMPLE_MYAREA_H #include <gtkmm/drawingarea.h> class MyArea : public Gtk::DrawingArea { public: MyArea(); virtual ~MyArea(); protected: //Override default signal handler: virtual bool on_expose_event(GdkEventExpose* event); }; #endif // GTKMM_EXAMPLE_MYAREA_H
file main.cpp
#include "myarea.h" #include <gtkmm/main.h> #include <gtkmm/window.h> int main(int argc, char** argv) { Gtk::Main kit(argc, argv); Gtk::Window win; win.set_title("DrawingArea"); MyArea area; win.add(area); area.show(); Gtk::Main::run(win); return 0; }
file myarea.cpp
#include "myarea.h" #include <cairomm/context.h> MyArea::MyArea() { } MyArea::~MyArea() { } bool MyArea::on_expose_event(GdkEventExpose* event) { // This is where we draw on the window Glib::RefPtr<Gdk::Window> window = get_window(); if(window) { Gtk::Allocation allocation = get_allocation(); const int width = allocation.get_width(); const int height = allocation.get_height(); // coordinates for the center of the window int xc, yc; xc = width / 2; yc = height / 2; Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context(); cr->set_line_width(10.0); // clip to the area indicated by the expose event so that we only redraw // the portion of the window that needs to be redrawn cr->rectangle(event->area.x, event->area.y, event->area.width, event->area.height); cr->clip(); // draw red lines out from the center of the window cr->set_source_rgb(0.8, 0.0, 0.0); cr->move_to(0, 0); cr->line_to(xc, yc); cr->line_to(0, height); cr->move_to(xc, yc); cr->line_to(width, yc); cr->stroke(); } return true; }
waere sehr nett falls jemand einen tipp wuesste.
vielen dank.
mfg.
-
Das wird wohl an visual c++ liegen, hier unter linux klappt bei mir alles. Versuch mal folgende Zeile:
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
durch diese hier zu ersetzen:
Cairo::RefPtr<Cairo::Context> cr(window->create_cairo_context());
-
funzt immer noch nicht (gleiche fehler-beschreibung wie vorher).
dass das eine unter linux geht aber auf windows etwas umprogrammiert werden muesste waere auch sehr seltsam gewesen, zumal gtkmm/gtk irgendwo (habe ich noch leise in erinnerung) plattform-uebergreifende philosophie beinhaltete!?!?
noch jemand mit ner idee woran es liegen koennte!?!?
waere echt nett.vielleicht nochwas zum hintergrund:
ich sagte zwar dass ich mir sicher bin dass ich gtkmm richtig installiert habe, jedoch habe ich bemerkt dass das visualc++ projekt-daten template was es irgendwo hier im forum gibt (beim thema wie man gtkmm installiert) fehler in bezug auf die namensgebung einer lib:
libgladem...lib hiess es statt glade...lib und die cairo libs waren auch nicht fuer den linker angegeben und mussten per hand nachgefuehrt werden.
das duerfte aber denke ich nicht das problem sein.macht einen schon nachdenklich, wenn alles richtig installiert zu sein scheint und dann die beispiel-programme noch nicht mal laufen.
wuerde es aber trotzdem weiter versuchen, also fuer ideen waere ich sehr dankbar.
gruss.
-
nudel75 schrieb:
funzt immer noch nicht (gleiche fehler-beschreibung wie vorher).
dass das eine unter linux geht aber auf windows etwas umprogrammiert werden muesste waere auch sehr seltsam gewesen, zumal gtkmm/gtk irgendwo (habe ich noch leise in erinnerung) plattform-uebergreifende philosophie beinhaltete!?!?
noch jemand mit ner idee woran es liegen koennte!?!?
waere echt nett.Jo, das sind Probleme der gtkmm-dlls. Ähnliche Probleme hatte ich auch bei der Benutzung von gtkmm unter Windows. Ich habe dann immer Workarounds programmiert.
vielleicht nochwas zum hintergrund:
ich sagte zwar dass ich mir sicher bin dass ich gtkmm richtig installiert habe, jedoch habe ich bemerkt dass das visualc++ projekt-daten template was es irgendwo hier im forum gibt (beim thema wie man gtkmm installiert) fehler in bezug auf die namensgebung einer lib:
libgladem...lib hiess es statt glade...lib und die cairo libs waren auch nicht fuer den linker angegeben und mussten per hand nachgefuehrt werden.
das duerfte aber denke ich nicht das problem sein.macht einen schon nachdenklich, wenn alles richtig installiert zu sein scheint und dann die beispiel-programme noch nicht mal laufen.
Ja, das Template sollte ich mal anpassen, aber ich komm' nicht dazu.
-
noch eine frage zum abschluss:
wenn die beschriebenen probleme grundsaetzliche probleme mit gtkmm sind, inwiefern kann dann gtkmm als stabile plattformuebergreifende und leicht zu erlernende gui-lib bezeichnet werden!?!?
hat jemand die angesprochenen probleme schonmal mit reinem gtk gehabt!?
ich bin am ueberlegen, ob ich mich nach was anderem umschaue um unter windows guis zu erstellen.
gruss.
-
nudel75 schrieb:
noch eine frage zum abschluss:
wenn die beschriebenen probleme grundsaetzliche probleme mit gtkmm sind, inwiefern kann dann gtkmm als stabile plattformuebergreifende und leicht zu erlernende gui-lib bezeichnet werden!?!?
Also gewollt ist das natürlich nicht. Alle Beispiele werden auch auf Windows getestet. Aber ich würde jetzt einfach mal sagen je weiter du bei gtkmm von gnu weggehst (windows, visual c++), desto wahrscheinlicher wird's, dass etwas nicht ganz klappt.
ich bin am ueberlegen, ob ich mich nach was anderem umschaue um unter windows guis zu erstellen.
Wenn du nur unter Windows GUIs erstellen willst, würde ich dir von gtkmm abraten. SmartWin ist vllt. eine überlegung wert.
-
nudel75 schrieb:
wenn die beschriebenen probleme grundsaetzliche probleme mit gtkmm sind, inwiefern kann dann gtkmm als stabile plattformuebergreifende und leicht zu erlernende gui-lib bezeichnet werden!?!?
Also ich kann nicht genau sagen, woher die Probleme von gtkmm unter Windows kommen, aber den gtkmm-Leuten ist Windows als Plattform wohl nicht sooo wichtig, wie es die Unix-Plattformen sind. Aber als ich gtkmm mit dem MinGW früher noch selber kompiliert habe, hatte ich diese Probleme nicht. Mag auch an der Kombi VC++ und gtkmm liegen. Dennoch bin ich der Meinung, dass man gtkmm unter Windows gut nutzen kann.
Des Weiteren halte ich gtkmm für leicht zu erlernen und auch recht schlüssig im Design. Es nutzt sehr viele moderne Programmierparadigmen, welche ein angenehmes Programmieren erlauben.hat jemand die angesprochenen probleme schonmal mit reinem gtk gehabt!?
Nein.
Cheers
GPC
-
danke der tipps wegen.
ich habe (wie bereits von euch schon angesprochen) dass es eher an der kombi visual c++ und gtkmm liegt.
es liegt sicher an einer projekt-konfiguration unter visual c++ warum das ganze abschmiert (hab ich jedenfalls das gefuehl, zumal es wie schon geschrieben unter linux oder unter windows mit mingw nicht so zu sein scheint).
eigentlich wollte ich eine frei verfuegbare gui lib nutzen um unter windows guis zu erstellen. gtkmm erschien mir passend.
aber vielleicht scheren sich die entwickler tatsaechlich nicht so sehr um die funktionsfaehigkeit unter windows (oder um eine detailierte konfiguration-angabe) damit alles reibungsfrei funzt, schade eigentlich.
ich wuesste daher (von den wenigen die dieses lesen) gerne zum abschluss noch, was es da als leicht zu erlerndende frei verfuegbare und auch unter windows gut laufende gui-lib gibt als alternative (smartWin wurde ja schon genannt).
vielen dank.
gruss.
-
nudel75 schrieb:
ich wuesste daher (von den wenigen die dieses lesen) gerne zum abschluss noch, was es da als leicht zu erlerndende frei verfuegbare und auch unter windows gut laufende gui-lib gibt als alternative (smartWin wurde ja schon genannt).
Na ja, leicht zu erlernen... ich denke, das nimmt sich alles nicht viel, wenn man sich auf GUI beschränkt. Aber als nächstes würde ich wxWidgets oder Qt empfehlen.