Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ist Variable existent ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
02.07.2004, 15:26 Uhr
~lutz
Gast


Mojens !!!

Hab da mal ne ganz kurze Frage:

Wie kann ich abfragen, ob eine Variable bzw. ein Pointer oder ein Objekt "x" existiert??

if(...)
{
delete x;
};

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2004, 15:33 Uhr
freshman



merke dir, daß du es angelegt hast!
--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.07.2004, 15:49 Uhr
~Lutz
Gast



Zitat:
freshman postete
merke dir, daß du es angelegt hast!



Sehr lustig!

Mit ner vernünftigen Antwort wie. "es geht so und so" oder "es geht gar nicht" währe mir um Einiges mehr geholfen.

Wenn ich eine solche Frage stelle hat das einen triftigen Grund und der liegt sicher nicht in meiner Blödheit.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.07.2004, 15:55 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Sehr lustig!

Mit ner vernünftigen Antwort wie. "es geht so und so" oder "es geht gar nicht" währe mir um Einiges mehr geholfen.

Wenn ich eine solche Frage stelle hat das einen triftigen Grund und der liegt sicher nicht in meiner Blödheit.


war irgendwie abzusehen das ne verärgerte antwort kommt
aber freshman hat recht das musst du dir selber merken...
schilder mal dein genaues problem was du machen willst, vermutlich machst du da nen designfehler
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.07.2004, 16:15 Uhr
Pablo
Supertux
(Operator)


Eigentlich gar nicht. Du kannst nur von deinen eigenen Pointern wissen, aber wenn du deine eigene nicht kennst, dann kannst du es nie wissen. Was du machen kannst, ist, wenn du meinst, x könnte sein Pointer auf a sein


C++:
if(x==&a)
{
    ...
}



du kannst aber delete bzw, free benutzen, wenn der Pointer dynamisch mit new oder malloc erzeugt wurde, sonst gibt es Speicherzugriffsfehler.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.07.2004, 16:19 Uhr
freshman



@~Lutz: hey, nimm es mir bitte nicht übel, aber das sollte kein Witz sein, sondern ich wollte dir wirklich helfen. Stand selber auch schon vor dem Problem und dachte, daß meine Antwort eindeutig interpretierbar sei; sorry
--
freshman.say("Wer nicht an Wunder glaubt ist kein Realist!\a");
while(1)freshman.ask(sillyQuestion);

Dieser Post wurde am 02.07.2004 um 16:20 Uhr von freshman editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.07.2004, 16:26 Uhr
0xdeadbeef
Gott
(Operator)


Hm. Ich würde an deiner Stelle nur äußerst selten Zeiger benutzen und Kram auf den Heap legen; für die gängigsten Aufgaben gibt es in der STL, oder spätestens in boost, sinnvollere Alternativen, die das Speichermanagement für dich übernehmen.

Ansonsten musst du dir wirklich merken, was du welchem Pointer zugewiesen hast - es kann ja auch gut sein, dass der Kram gar nicht auf dem Heap liegt, und dann kann ein delete dir segfaulten. Ich hab einen FAQ-Beitrag, den ich in letzter Zeit immer öfter verlinken muss, weil sich scheinbar keiner die Mühe macht, da mal reinzukucken - der handelt zwar von C, aber wenn du malloc durch new und free durch delete ersetzt, trifft es auf C++ genau so zu: https://ssl.secure-hosts.de/www.fun-soft.de/showtopic.php?threadid=4351
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.07.2004, 16:29 Uhr
~Lutz
Gast


...dann will ich mich mal nicht weiter gekränkt fühlen :-)

Ich kämpfe immer noch massiv mit der Klassenproblematik und dem hin und her übergeben von Arrays von Funktion zu Funktion bzw. von Klasse zu Klasse.
hoffe ich kann das Problem gut in Worte fassen.

Mein Programm kann beim Aufruf mit Daten gefüttert werden.
Diese Daten kommen aus verschidenen Dateien, welche dem Programmaufruf angehängt werden.

Bsp:

Programm Data01.dat Data02.dat usw.

Es wird erst gecheckt, wieviel Dateien einzulesen sind.

Für das Einlesen hab ich eine Klasse geschrieben.
diese kann eine Datei einlesen und in ein Array packen.

Damit ich nun ALLE Dateien einlesen kann allokiere ich ein Array aus Objekten der Klasse.

Damit ich das kann, hab ich die Übergabe von Werten im Konstruktor weggelassen (als es nur um eine Datei ging hab ich schon beim Erzeugen eines neuen Objektes die Informationen was einzulesen ist mitübergeben - mit dieser Lösung konnte ich aber kein Array aus Objekten der Klasse erzeugen) und jetzt steht im Konstruktor KEINE Anweisung mehr.

Für das Einlesen der Daten hab ich nun innerhalb der Klasse die Funktion read dazugefügt. Funktioniert auch alles wunderbar.

Wenn ich aber im Konstruktor nichts erzeugt hab kann ich im Destruktor auch nichts zerstören. Es sind aber evtl. Daten vorhanden, die zerstört werden müssen. Deshalb wollte ich im Konstruktor eine Abfrage einbauen, ob es die Variable bzw. den Pointer der erst in der Funktion read, nicht aber im Konstruktor erzeugt worden ist überhaubt gibt.

Ich weiß ich weiß, das ist alles noch sehr unelegant. Ich werds bestimmt auch noch 1000mal umbauen und überdenken müssen.

Ich schaffe es auch nicht ein Array aus Objekten der Klasse dynamisch zu allokieren. :-(
Aber das währe ein neues Thema oder eine Suche wert.

MFG,

Lutz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.07.2004, 16:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich weiss ja nicht was genau du machen willst aber wenn du dir die allokierei ersparen willst nimm z.b. einen std::vector... den kannst du genauso ansprechen und verwenden wie ein array aber er nimmt dir die ganze allokierei ab...



an sonsten läuft hast du ja in der klasse irgendeine membervariable als zeiger die dir auf dein array zeigen soll... setzte den zeiger im konstrukter auf NULL...

im destruktor kannst du abfragen ob der zeiger noch auf null steht... wenn nicht hast du speicher für allokiert und kannst diesen mit delete wieder freigeben. in dem fall wäre dann deine abfrage oben doch schon ziemlich nahe an dem was du machen willst, nur das du nicht abfragen kannst ob deine variable noch existiert... der zeiger existiert so lange das objekt deiner klasse existiert, was du checken kannst ist lediglich ob dein zeiger auf einen allokierten bereich zeigt in dem du ihn halt entsprechend gültig oder ungültig setzt


C++:
//konstruktor

zeiger = NULL;

//Destruktor
if(zeiger) delete [] zeiger;



allerdings ist es wie gesagt leichter mit z.b. std::vector zu arbeiten...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 02.07.2004 um 17:07 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.07.2004, 16:55 Uhr
~Lutz
Gast


@Windalf:

Ach so.
Mit std::vector will ich erst arbeiten, wenn ich den ganzen "Spaß" mit Pointern und Arrays entlich mal kapiert hab. Trotzdem guter Tipp.


@freshman:

Sorry, bin heut leicht gereizt (Erkältung) und schnell auf die Palme zu bringen.


Danke (auch an die anderen fleißigen Helfer)!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: