Seite 1 von 1
QTime Problem - Wer kann es nachvollziehen?
Verfasst: 12. November 2004 19:29
von pinktroll
Hallo,
wenn ich in meinem constructor
einfüge, dann wird mein programm sauber kompiliert.
beim auführen stürzt es aber mit
Prozess abgebrochen
ab.
wenn ich stattdessen
benutze, dann klappt alles.
soweit ich gelernt hab, benutze ich dann aber keinen Pointer auf QTime sondern direkt und verbrate Speicher...
Als Entwicklungsumgebung nutze ich KDevelop 3.1 unter Debian/GNU Sid.
danke!!
Verfasst: 13. November 2004 00:09
von ArneStocker
Das ist kein spezifischen QTime Problem.
Das Objekt, mit dem Du arbeiten möchtest, existiert noch nicht, mit anderen Worten, da wo Dein Zeiger hinzeigt, gibt es kein QTime Objekt (weswegen das Schreiben von Daten in diesen Bereich zu einer Access Violation führt). Du musst für Deinen Zeiger erst ein Objekt auf dem Heap erzeugen (am besten machst Du vor Deine Zeiger immer ein p, damit Du sie von den anderen Variablen unterscheiden kanst )
QTime *pMeineZeit = new QTime;
pMeineZeit->setHMS(0,0,0);
Wenn Du das Objekt in der Weise eingibst
QTime meineZeit
meineZeit.setHMS(0,0,0)
wird das Objekt automatisch (auf dem Stack) erzeugt, wenn der Bezugsrahmen Deines Construktors betreten wird.
Gruss Arne
Verfasst: 13. November 2004 11:41
von pinktroll
Vielen Dank für die Erklärung Arne!
Nur zum Verständniss:
Wenn ich in meiner Klasse eine Variable (egal ob aus Qt oder aus c++)
habe, die ich bei der Erstellung vom Constructor gefüllt haben möchte, muss diese Variable auf dem Stack erzeugt werden. stimmt das so?
Gruß
Martin
Verfasst: 13. November 2004 16:20
von lepsai
Konstruktor einer Klasse wird bei der Erstellung einer Instanz dieser Klasse aufgerufen. Es ist völlig unerheblich, ob dieser wunderbarer Vorgang auf dem Stack oder auf dem Heap stattfindet...
Meine Empfehlung - C++ lernen und zwar schnell und gründlich!
Verfasst: 14. November 2004 03:48
von ArneStocker
hallo pinktroll
Du musst Dir überlegen, was Du mit Deiner Variablen (bzw. Deinem QTime Objekt) machen willst. Wird das QTime Objekt nur innerhalb des Konstruktor benötigt, kannst Du es auf dem Stack erzeugen. Wird das QTime Objekt für die gesamte Lebenszeit Deines Objektes benötigt, solltest Du es als Member - Variable anlegen
class IrgendEinObjekt
{
QTime m_meineZeit;
}
Es ist dann sozusagen Bestandteil (Member) Deines Objektes.
Soll Dein QTime Objekt das andere Objekt überleben und ggf. von anderen Objekten genutzt werden, dann musst Du es mit new auf dem Heap erzeugen. Allerdings musst Du das QTime Objekt später mit delete wieder löschen und dafür sorgen, dass andere Objekte anschließend nicht noch versehentlich auf das Objekt zugreifen.
Diese Ausführungen sind allerdings ziemlich theoretisch, wahrscheinlich würde niemand ein so einfaches Objekt wie QTime auf dem Heap erzeugen, sondern es bei Bedarf einfach (sozusagen von Stack zu Stack) kopieren. Wenn Du Deine Variablen und Objekte auf dem Stack (also nicht mit new) erzeugst, bist Du in jedem Falle auf der sicheren Seite.
Aber lepsius hat Recht: zur Vertiefung sollstest Du Dich mit einem Buch über OO Programmierung in c++ und dort insbesondere mit Variablen und Zeigern auf Variablen beschäftigen.
Gruss Arne