[C++/QT] Segmentation Fault

Servus!
Ich hab hier bei meinem Prog ein Problem:
An einer bestimmten Stelle im Programm tritt auf einmal ein SegmentationFault auf.

Hier mal ein paar Daten:
Wenn ich mit Eclipse debugge kann ich den absürz bis hierhin verfolgen
Code:
Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.)	
	29 QList<SiedlerStatEntry>::detach() /usr/include/qt4/QtCore/qlist.h:119 0x0804d20d	
	28 QList<SiedlerStatEntry>::append() /usr/include/qt4/QtCore/qlist.h:420 0x0804d241	
	27 SiedlerStat::submit() /home/mrspider/workspace/SiedlerStat/siedlerstat.cpp:129 0x0804b342	
	26 SiedlerStat::qt_metacall() /home/mrspider/workspace/SiedlerStat/debug/moc_siedlerstat.cpp:72 0x0804dfd5	
	25 QMetaObject::activate()  0xb785ecf4	
	24 QMetaObject::activate()  0xb785f050	
	23 QAbstractButton::clicked()  0xb7f1a501	
	22 <symbol is not available> 0xb7ce3c29	
	21 <symbol is not available> 0xb7ce5400	
	20 QAbstractButton::mouseReleaseEvent()  0xb7ce563b	
	19 QWidget::event()  0xb7a34fbd	
	18 QAbstractButton::event()  0xb7ce46ff	
	17 QPushButton::event()  0xb7d77692	
	16 QApplicationPrivate::notify_helper()  0xb79eb28d	
	15 QApplication::notify()  0xb79ef4f1	
	14 QCoreApplication::notifyInternal()  0xb784bc1b	
	13 <symbol is not available> 0xb7a47b4a	
	12 QApplication::x11ProcessEvent()  0xb7a47197	
	11 <symbol is not available> 0xb7a6c684	
	10 g_main_context_dispatch()  0xb7382cc6	
	9 <symbol is not available> 0xb7386083	
	8 g_main_context_iteration()  0xb738663e	
	7 QEventDispatcherGlib::processEvents()  0xb786ff82	
	6 <symbol is not available> 0xb7a6c475	
	5 QEventLoop::processEvents()  0xb784afb2	
	4 QEventLoop::exec()  0xb784b0bc	
	3 QCoreApplication::exec()  0xb784d88a	
	2 QApplication::exec()  0xb79ea6e7	
	1 main() /home/mrspider/workspace/SiedlerStat/main.cpp:11 0x0804ab70
Mit dem gdb bekomme ich folgende Meldung:
]
Code:
Starting program: /home/mrspider/workspace/SiedlerStat/SiedlerStat -dograb
[Thread debugging using libthread_db enabled]
[New Thread 0xb704c8d0 (LWP 17929)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb704c8d0 (LWP 17929)]
0x0804d20d in QList<SiedlerStatEntry>::detach (this=0x30) at /usr/include/qt4/QtCore/qlist.h:119
119	    inline void detach() { if (d->ref != 1) detach_helper(); }

Hier mal der Teil des Programms, in dem es abstürzt:
Code:
	currentEntry = new SiedlerStatEntry(new QDate(dateEdit->date()),
			playerPointLines[0]->text(), playerPointLines[1]->text(),
			playerPointLines[2]->text(), playerPointLines[3]->text());
	data->append(SiedlerStatEntry(*currentEntry));
Code:
class SiedlerStatData : public QList<SiedlerStatEntry>{
public:
	SiedlerStatData();
	virtual ~SiedlerStatData();
	void sort();
};
Code:
/*
 * SiedlerStatEntry.cpp
 *
 *  Created on: 04.01.2009
 *      Author: mrspider
 */

#include "SiedlerStatEntry.h"

int SiedlerStatEntry::idCount = 0;

SiedlerStatEntry::SiedlerStatEntry(QDate *date, int p1, int p2, int p3, int p4) {
	this->date = date;
	this->id = SiedlerStatEntry::idCount++;
	this->points = new int[4];
	points[0] = p1;
	points[1] = p2;
	points[2] = p3;
	points[3] = p4;
}

SiedlerStatEntry::SiedlerStatEntry(QDate *date, QString p1, QString p2,
		QString p3, QString p4) {
	SiedlerStatEntry(date, p1.toInt(), p2.toInt(), p3.toInt(), p4.toInt());
}

SiedlerStatEntry::SiedlerStatEntry(const SiedlerStatEntry  &other){
	date = other.getDate();
	id = other.getId();
	points = other.getPoints();
}

SiedlerStatEntry::~SiedlerStatEntry() {
	// TODO Auto-generated destructor stub
}

QDate* SiedlerStatEntry::getDate() const {
	return date;
}

void SiedlerStatEntry::setDate(QDate *date) {
	this->date = date;
}

int* SiedlerStatEntry::getPoints() const {
	return points;
}

void SiedlerStatEntry::setPoints(int *points) {
	this->points = points;
}

int SiedlerStatEntry::getId() {
	return this->id;
}

bool SiedlerStatEntry::operator <(SiedlerStatEntry other) {
	return date < other.getDate();
}

bool SiedlerStatEntry::operator ==(SiedlerStatEntry other) {
	return this->id == other.getId();
}

Ich hab leider keine Ahnung warum dieser Segfault ausgelöst wird. Ich hoffe ihr könnt mir dabei helfen
MrSpider
 
Die Zeile
0x0804d20d in QList<SiedlerStatEntry>::detach (this=0x30) at /usr/include/qt4/QtCore/qlist.h:119
sagt, dass der this-Pointer den Wert 0x30 hat, das hat den gleichen Effekt wie ein NULL-Pointer, da die ersten 64kB Speicher im virtuellen Adressraum geschützt sind.

Hast du irgendwo die Koordinate oder der Wert 48 (also 0x30) verwendet? Dann solltest du dir den Code an der Stelle nochmal genau ansehen.

Es sieht so aus als würdest du irgendwo 'nen "int" vom Point an die falsche Stelle im Stack schreiben. Oft passiert das bei fehlerhaften Pointer-Rechnereien z.B.:

Code:
class kopiluwak
{
public:
  kopiluwak(){};
  ~kopiluwak(){};
  void do_stuff(){ some_value[0] = GetTickCount();};

  int some_value[2];
};

void test()
{
  int array[3] ={ 0 };
  kopiluwak *p = new kopiluwak();

  array[3] = 48;
  p->do_stuff();
}
 
...Ich bin so blöd. Ich hab vergessen data (die Klasse die von Qlist erbt) zu initialisieren....

Danke für deine Mühe!!!
 
Zurück
Oben