Hallo,
ich habe mich bis jetzt hauptsächlich mit der Java-Programmierung beschäftigt und will jetzt auch ein wenig etwas in C++ arbeiten.
Als ich angefangen habe, mich mit C++ zu befassen, ist mir die Frage gekommen, was das ganze Theater mit den Pointern und Referenzen soll. In Java dagegen geht das ja alles ziemlich einfach.
Was mich derzeit besonders stört, ist, dass der Speicherzugriff nicht beim Kompilieren "kontrolliert" wird, und ich mich ziemlich häufig mit segmentation faults beschäftigen muss. Unter Java brauch man ja nicht mal über sowas nachzudenken, und in C++ kann man ewig suchen, bis man den eigentlichen Fehler gefunden hat.
Nun die eigentliche Frage:
Wie kann ich einem Thread (pthread/Linux) eine lokale Variable übergeben?
Der Thread wird folgendermaßen erstellt:
Die Thread-Funktion:
Beim Aufruf von andereFunktion() erhalte ich einen segmentation fault. Diese Funktion versucht lediglich, mit den ihr übergebenen Werten zu arbeiten.
Warum ich diesen Speicherzugriffsfehler erhalte, ist mir eigentlich auch klar:
Ich übergebe dem Thread Adressen zu lokalen Variablen, die im anderen Thread ihre Gültigkeit verloren haben.
Nur weiß ich nicht, wie ich es anders machen könnte - wie gesagt komme ich aus der Java-Welt, in der alles anders zu funktioneren scheint.
Ich würde mich freuen, wenn ihr mir ein paar Gedankenanstöße geben könntet!
ich habe mich bis jetzt hauptsächlich mit der Java-Programmierung beschäftigt und will jetzt auch ein wenig etwas in C++ arbeiten.
Als ich angefangen habe, mich mit C++ zu befassen, ist mir die Frage gekommen, was das ganze Theater mit den Pointern und Referenzen soll. In Java dagegen geht das ja alles ziemlich einfach.
Was mich derzeit besonders stört, ist, dass der Speicherzugriff nicht beim Kompilieren "kontrolliert" wird, und ich mich ziemlich häufig mit segmentation faults beschäftigen muss. Unter Java brauch man ja nicht mal über sowas nachzudenken, und in C++ kann man ewig suchen, bis man den eigentlichen Fehler gefunden hat.
Nun die eigentliche Frage:
Wie kann ich einem Thread (pthread/Linux) eine lokale Variable übergeben?
Der Thread wird folgendermaßen erstellt:
Code:
string server = eineFunktion(); // eine Funktion() gibt einen Pointer zu einem char-Array zurück
string user = eineFunktion();
string pw = eineFunktion();
struct initftp_struct str = {server, user, pw}; // initftp_struct ist eine Struktur, die drei Strings enthält
pthread_t thread;
int ret = pthread_create(&thread, NULL, initftp_thread, (void*) &str);
Die Thread-Funktion:
Code:
void* initftp_thread(void *ptr) {
usleep(50000);
struct initftp_struct *str = (struct initftp_struct*) ptr;
andereFunktion(&(str->server), &(str->user), &(str->pw)); // Prototyp: void andereFunktion(string *server, string *user, string *pw);
}
Beim Aufruf von andereFunktion() erhalte ich einen segmentation fault. Diese Funktion versucht lediglich, mit den ihr übergebenen Werten zu arbeiten.
Warum ich diesen Speicherzugriffsfehler erhalte, ist mir eigentlich auch klar:
Ich übergebe dem Thread Adressen zu lokalen Variablen, die im anderen Thread ihre Gültigkeit verloren haben.
Nur weiß ich nicht, wie ich es anders machen könnte - wie gesagt komme ich aus der Java-Welt, in der alles anders zu funktioneren scheint.
Ich würde mich freuen, wenn ihr mir ein paar Gedankenanstöße geben könntet!