Übergabe einer verketteten Liste

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
sxe
Beiträge: 2
Registriert: 27. Januar 2009 16:31
Kontaktdaten:

Übergabe einer verketteten Liste

Beitrag von sxe »

Hallo zusammen,

ich bin noch ganz frisch im Bereich qt und C++ und hoffe ich finde hier die ersehnte Hilfe. :)

Ich benutze den qt creator aber ich denke mein Problem ist eher auf einen c++ Fehler meinerseits zurück zu führen.

Aber genug dazu.

Ich habe eine klasse die die grundlegenden Funktionen einer verketteten Liste bereitstellt (ich glaub hier aus dem Forum).
Da sie ansicht funktioniert und das Problem daher woanders liegen muss, poste ich die klasse erstmal nicht.

Weiterhin habe ich eine MainWindow Klasse, die ein Objekt dbHm erzeugt und in diesem Objekt wird eine verkettete Liste erzeugt die per getValues() geholt wirdl und danach per setValues() an ein custom widget übergeben wird, in dem ich den Inhalt der Liste dann verarbeiten möchte. Leider funktioniert das nicht. Das Programm kompiliert und startet zwar aber beim beenden stürzt es ab. Und die Werte bzw die Liste wird auch nicht übergeben.

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dbconnectholdemmanager.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);
    DbConnectHoldemmanager *dbHm = new DbConnectHoldemmanager();
    ui->renderGraph->setValues(dbHm->getValues());
}

MainWindow::~MainWindow()
{
    delete ui;
}

hier noch die Klasse in der die Liste erzeugt wird:

Code: Alles auswählen

#include "dbconnectholdemmanager.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVariant>
#include <QtDebug>
#include <iostream>
#include <QMessageBox>
#include "mainwindow.h"
using namespace std;


DbConnectHoldemmanager::DbConnectHoldemmanager()
{

     (...)
     values.AddItem(1234);
    (...)
}




CListe DbConnectHoldemmanager::getValues()
{
 return this->values;
}
und die dazu gehörige header datei:

Code: Alles auswählen

#ifndef DBCONNECTHOLDEMMANAGER_H
#define DBCONNECTHOLDEMMANAGER_H

#include "CListe.h"

class DbConnectHoldemmanager
{
public:
    DbConnectHoldemmanager();
    ~DbConnectHoldemmanager();
     CListe getValues();


 private:
     CListe values;

};

#endif // DBCONNECTHOLDEMMANAGER_H
und hier noch der Fehler, der beim beenden der Anwendung kommt: http://rafb.net/p/StvDCR34.html

Wenn ich keine Liste sondern einen normalen int übergebe klappt alles wie vermutet. Ich denke es liegt also an der Übergabe der Liste.

Wenn bis hierhin alles richtig sein sollte, werde ich das schreiben der Liste noch posten. Der ganze Post hier wird sonst denke ich zu groß.

Vielen Danke schonmal an alle

Gruß

Andy
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ich habe eine klasse die die grundlegenden Funktionen einer verketteten Liste bereitstellt (ich glaub hier aus dem Forum).
Möglich, aber glaub ich nicht... denn ich behaupte mal, dass jeder hier einfach QLinkedList (http://doc.trolltech.com/4.4/qlinkedlist.html) verwenden würde...

Code: Alles auswählen

CListe DbConnectHoldemmanager::getValues()
{
   return this->values;
} 
..
*** glibc detected *** double free or corruption (out): 0x09ed7e00 ***
Vermutlich fehlt in CList der Copy-Constructor, so dass nur eine flache Kopie der LinkedList erstellt wird und im Destructor die Elemente daher zweimal freigegeben werden... poste mal den Header von CList...
sxe
Beiträge: 2
Registriert: 27. Januar 2009 16:31
Kontaktdaten:

Beitrag von sxe »

Hast rechts, mit der eingebauten verketteten Liste war es leichter und ging dann auch.

Vielen Dank für den Tip. :)
Antworten