Problem QVector, QList als Pointer in Class

Alles rund um die Programmierung mit Qt
Antworten
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Problem QVector, QList als Pointer in Class

Beitrag von C_R »

Hi,

ich habe eine Klasse mit einigen privaten Vektoren (ca 90 Stück).

Die Vektoren sind als Pointer definiert, da es sonst zu alloc-Fehlern bei Erstellen der Klasse führt (was ja prinzipiell auch klar ist)

Definition also in etwa so:

Code: Alles auswählen

class vieleVectoren
{
...
private:
QVector <double> * myVector;
};
Das erstellen der Klasse funktionert, sobald aber ein Zugriff auf einen der Vektoren erfolgt, zb:

Code: Alles auswählen

myVector->reserve(1);
Woraufhin das Programm abstürzt, Segmentation Fault, reserve(this = 0x10.., size = 1) @ qvector.h:200
also nicht 0x0

Krieg langsam nen Krampf damit. Weiß nicht, wie ich es lösen sollte..
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

hast du den myVector initialisiert? ferner wird die reserve() funktion verwendet um den vektor etwas zu beschleunigen, indem man ihm die ungefähr erwartete anzahl der elemente, die gespeichert werden, beim reserve() angibt. was also versuchst du zu machen?

im übrigen, wenn du den pointer nicht initialisierst, verweist er irgendwohin im speicher. deshalb kein 0x000000. wenn du den pointer mit = 0 initialisierst wird er auf 0x000000 zeigen.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

oh man ja :X
natürlich, initialisieren... :oops:

:roll:
da sieht man den wald vor bäumen nicht..
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

Hm das funktioniert bei 15 Vektoren ganz gut, aber bei 30 verwürfelt er da was im Speicher..

Also ich initialisiere 30 Vektoren und verwende erstmal nur ~15

Die letzten 15 sind einfach nur initialisiert und nicht verwendet. Lösche ich diese Initialisierung dieser 15, klappen die restlichen 15..mit den weiteren 15 aber eben nicht.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

Ok, lag dann wohl an was anderem.

Danke für die Hilfe!
Antworten