Pointer als return
-
Hallo.
Ich dachte mittlerweile habe ich die ganze Sache mit Pointern verstanden, aber gerade hänge ich wieder an einem Problem, wofür ich keine Lösung finde.
Mein Quelltext sieht grob so aus:
int main(int argc, char *argv[]) { struct LIBSSH2_SESSION *ptr = NULL; meine_funktion(ptr); printf("2: %i\n", ptr); return 0; } int meine_funktion(struct LIBSSH2_SESSION *ptr) { prt = libssh2_session_init(); printf("1: %i\n", ptr); return 0; }
Wenn ich das nun so ausführe bekomme ich in etwa folgendes:
1: 123456789 2: 0
Was muss ich tun, damit ich auch in meiner main-Funktion den korrekten Wert für den Pointer habe?
Danke schonmal, Andreas
-
Schau dir mal
call by value
undcall by reference
an. Was du brauchst ist das Letztere.In diesem Fall also (Funktionsprototyp)
int meine_funktion(struct LIBSSH2_SESSION **ptr);
Und dann natürlich noch ein paar kleine Dinge ändern.
-
Du musst den Pointer per Referenz übergeben, also einen Pointer auf den Pointer. Sonst veränderst du in deiner Funktion nämlich nur deine lokale Kopie des Pointers.
Der Formatspezifizierer für Pointer ist übrigens %p, nicht %i.
-
... und in der Funktion natürlich dereferenzieren ...
-
...manchmal ist es ganz komisch - wenn man es richtig macht geht es auch...
-
Da hab ich doch glatt das DANKE vergessen!