[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/207609

    Das 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!


Anmelden zum Antworten