funktionsaufruf soll zeiger nicht kopieren...
-
Geht auch mit Referenz auf Zeiger, nennt sich aber &* statt *&. Fand ich auch unintuitiv, aber naja. Also:
void funktion(telefonat &*akt){ //do something }
-
Quatsch, Zeiger werden doch bei Funktionsaufrufen nicht kopiert. Einfach normal übergeben und fertig!
-
@0xdeadbeef
Bist du dir da sicher? Ich kenn das eher mit *&. Das funktioniert bei meinen Compilern auch so (MinGW, BCB).@Was!?!?!?!?
Lies dir bitte noch mal das Tutorial deiner Wahl durch. Natürlich werden Zeiger kopiert.
-
Was!?!?!?!? schrieb:
Quatsch, Zeiger werden doch bei Funktionsaufrufen nicht kopiert. Einfach normal übergeben und fertig!
Versuch folgenden Code, und du wirst sehen, dass er kopiert wird! Aber ist ja auch völlig klar.
#include <iostream> void foo(int *p) { p=NULL; } int main() { int *p = new int(5); foo(p); std::cout << p; return 0; }
-
Und die richtige variante funktioniert mit
foo(int *&p)
wobei das nach meiner meinung viel unintuitiver ist!
-
danke fuer die schnellen antworten. mein compiler g++-3.4 kompilert beide varianten, die telefonat *&akt variante und auch die zeiger auf zeiger methode. theoretisch erscheint mir das auch logisch, aber...
beim zugriff in der funktion, auf eine elementfunktion zb.:
void(telefonat *&akt){
cout << "\nspringe zum vorigen element der liste\n";
if (akt->gpre() != NULL) akt = akt->gpre();
else cout << "\ndas ist das erste Element.\n";
}haengt sich mein programm auf, d.h. der prozessor arbeitet 100% und nix tut sich.
gabriel
-
Ist akt ein gültiger Pointer (würde ich vorher lieber testen).
Was macht gpre()?
Bist du mal mit dem Debugger durchgegangen?
An der Funktionsdeklaration liegt es jedenfalls nicht.
-
ok, ok, ok vielen vielen dank.
das problem jetzt liegt an meinem code und einer nicht ueberpruften iterationsbedingung...gabriel
-
Slin schrieb:
Und die richtige variante funktioniert mit
foo(int *&p)
wobei das nach meiner meinung viel unintuitiver ist!
Du wirst deine Meinung ändern oder zumindest relativieren, wenn du die Deklarationssyntax von C++ verstanden hast.
-
@Slin: Wenn du schon mal was von Speicherlöchen gehört hättest würdest du verstehen, warum ich diesen Code nicht testen werde.
-
Bitte nicht füttern.
-
Was!?!?!?!? schrieb:
@Slin: Wenn du schon mal was von Speicherlöchen gehört hättest würdest du verstehen, warum ich diesen Code nicht testen werde.
Speicher, welcher von einem Programm reserviert wird, wird freigegeben, sobald das Programm beendet wird.
Wäre dies nicht so, müßte man ja jedesmal den Rechner neustarten, um den nicht-freigegebenen Speicher wieder nutzen zu können.
-
Was!?!?!?!? schrieb:
@Slin: Wenn du schon mal was von Speicherlöchen gehört hättest würdest du verstehen, warum ich diesen Code nicht testen werde.
dann musste den computer tauschen. das ist wie bei von motten zerfressenen klamotten. wenn die bits alle in ein bodenloses loch fallen ist er ein fall für den sperrmüll :p
-
Bashar schrieb:
Slin schrieb:
Und die richtige variante funktioniert mit
foo(int *&p)
wobei das nach meiner meinung viel unintuitiver ist!
Du wirst deine Meinung ändern oder zumindest relativieren, wenn du die Deklarationssyntax von C++ verstanden hast.
Ja okay, da fehlt ein delete am ende, wirste wohl aber noch selber eintragen können. Habs halt eifnach vergessen... wollte aber nicht den Speicherplatz deines Rechners für immer wegschmeißen.