[gtkmm] TreeView::append_column bringt beim Beenden Speicherverletzung
-
Hi!
Ich nutze Visual Studio Professional 2012 (Student) und versuche für ein Projekt eine GUI mit gtkmm-2.4 hinzubekommen.
Jetzt wollte ich einen TreeView hinzufügen, das funktioniert auch solange das Programm läuft. Aber sobald ich das Programm beende bekomme ich eine Fehlermeldung:--------------------------- Microsoft Visual C++ Debug Library --------------------------- Debug Assertion Failed! Program: D:\<...>\Debug\SerialPort.exe File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c Line: 1322 Expression: _CrtIsValidHeapPointer(pUserData) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) --------------------------- Abbrechen Wiederholen Ignorieren ---------------------------
Aus dem Log:
HEAP[SerialPort.exe]: Invalid address specified to RtlValidateHeap( 00DF0000, 00629C50 )
SerialPort.exe has triggered a breakpoint.Zum Programm: Die GUI besteht aus einem Hauptfenster und mehreren Tabs. Der erste Tab kümmert sich um eine serielle Schnittstelle - das funktioniert problemlos.
Jetzt wollte ich einen Parser hinzufügen, der in einem eigenen Tab seine Ergebnisse in einem TreeView präsentiert.#pragma once class TabMessageHandler : public Gtk::VBox { private: //Define Columns class Columns : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn<Glib::ustring> m_Type; Gtk::TreeModelColumn<Glib::ustring> m_Raw; Columns() { add(m_Type); add(m_Raw); } ~Columns() {} }; public: TabMessageHandler(); ~TabMessageHandler(); Gtk::ScrolledWindow m_ScrolledWindow1; Gtk::TreeView m_TreeView; Glib::RefPtr<Gtk::TreeStore> m_TreeStore; Columns m_Columns; };
#include"stdafx.h" TabMessageHandler::TabMessageHandler() : Gtk::VBox(), m_ScrolledWindow1() { //Layout pack_start(m_ScrolledWindow1, Gtk::PACK_EXPAND_WIDGET, 10); m_ScrolledWindow1.set_shadow_type(Gtk::SHADOW_ETCHED_OUT); m_ScrolledWindow1.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); m_ScrolledWindow1.add(m_TreeView); //Create TreeView m_TreeView.set_model(m_TreeStore = Gtk::TreeStore::create(m_Columns)); //!!! // Sobald diese beiden Zeilen mit compiliert werden, kommt die Fehlermeldung //!!! //m_TreeView.append_column("Type", m_Columns.m_Type); //m_TreeView.append_column("Raw Message", m_Columns.m_Raw); //Demo fill Gtk::TreeModel::Row row= *(m_TreeStore->append()); row[m_Columns.m_Type]= "Demo1"; row[m_Columns.m_Raw] = "01 23 45 67 89"; row= *(m_TreeStore->append()); row[m_Columns.m_Type]= "Demo2"; row[m_Columns.m_Raw] = "AB CD EF"; } TabMessageHandler::~TabMessageHandler() {}
Ich habe das Programm nach dem Tutorial hier aus dem Forum aufgebaut.
Was läuft da schief?
-
Hat niemand auch nur eine Idee?
EDIT: Ich habe gerade ein neues Projekt erstellt und einfach nur das Beispiel aus dem Tutorial genommen:
http://www.c-plusplus.net/forum/207609Das gleiche Ergebnis. Er hängt irgendwie im Destruktor fest.
-
Ich habe noch etwas getestet: Mit MSVC++ 2010 funktioniert es. Es liegt also an MSVS 2012!
Wenn ein Moderator es für sinnvoll erachtet, bitte zu Visual C++ schieben!