PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prüfen, ob bereits Speicher reserviert wurde



Nicolas
28-04-2004, 19:41
Hallo!

Ich habe eine kleine Frage zu meinem Programm:


Prog::Prog(bla)
{
[...]
connect( button, SIGNAL( clicked() ), this, SLOT( init() ) )
init()
}

Prog::init()
{
if (Speicher reserviert für xyz)
delete xyz;
xyz = new XYZ(bla)
}

Jetzt habe ich aber das Problem, dass ich nicht weiß wie ich das mache, mit dem Testen, ob für xyz bereits Speicher reserviert wurde. Das Objekt soll eigentlich nur gelöscht werden, wenn es erzeugt wurde, da mein Programm sonst abstürzt. Es soll also nur gelöscht werden, wenn die Funktion ein zweites Mal aufgerufen wird, wenn der Benutzer auf den Button klickt. Klar ich könnte einfach eine Variable dafür nehmen, aber vielleicht gibt es etwas einfacheres.

Nicolas

wraith
28-04-2004, 20:11
Im Konstruktor von Prog setzt du xyz auf 0.
Wenn xyz == 0 ist weißt du das kein Speicher angelegt wurde, ansonsten ist der Zeiger ungleich 0.
Da delete auf einem Null-Zeiger angewendet nichts tut, sieht deine Init Methode dann so aus


Prog::init()
{
delete xyz; //Wenn vorher genewed lösche,sonst war Zeiger 0,tue nichts
xyz = new XYZ(bla)
}

Nicolas
05-05-2004, 19:48
Das Programm stürzt jetzt nicht mehr ab, aber wenn ich mit delete xyz die Klasse (Kindklasse von QWidget) lösche, wird das Widget nicht mehr aufgebaut. Ich habe keine Ahnung, woran das liegen könnte.

Nicolas

anda_skoa
06-05-2004, 16:14
Vielleicht löscht du zu früh?

Ciao,
_

Nicolas
09-05-2004, 21:02
Ich habe es jetzt einfach ganz anders gelöst, nämlich mit dem QWidgetStack und jetzt geht es. Danke für eure Hilfe!

Nicolas