_beginthreadex - Problem mit Parameter übergabe an Thread
-
Du kannst natürlich auch malloc/free verwenden, wenn Dir das lieber ist.
-
Entschuldige das ich lange Zeit nichts mehr zu dem Thema schrieb aber ich war bis gestern im Urlaub.

Du kannst natürlich auch malloc/free verwenden, wenn Dir das lieber ist.
Leider stürtzt mein Programm immer ab wenn ich folgendes mache:
unsigned __stdcall cmd(void* message) { //irgendwas free(message) //Hier stürtzt alles ab.... }
-
Weiß keiner eine Lösung?
Ist echt dringend!
-
Am Sinnvollsten ist es, den vorhandenen Code zu nehmen und Stück für Stück in eine neue Sourcecode-Datei zu kopieren, so dass er möglichst kurz bleibt und dennoch den Fehler beinhaltet. Häufig stolpert man beim Erstellen dieses minimalen Codebeispiels selbst über die Fehlerursache.
-
Naja das hilft mir auch nicht wirklich weiter,da ich nicht weiß wie ich den Fehler beheben kann.
Es liegt ja nur an einer Zeile.
-
zeig einfach ein minimalen, kompletten, komplierbaren code der zum abstürz führt. dann kann man dir auch helfen.
-
Leider stürtzt mein Programm immer ab wenn ich folgendes mache:
unsigned __stdcall cmd(void* message) {
//irgendwasfree(message) //<----------Hier stürtzt alles ab....
}Also bitte mal die Augen aufmachen beim Lesen.
-
das lässt sich so nicht kompilieren!

-
for(;;) { //irgendwelcher code char *p = calloc(strlen(buffer),sizeof(char)); strcpy(p, buffer); _beginthreadex(NULL,0,cmd,p,0,NULL); }unsigned __stdcall cmd(void* message) { //irgendwas free(message) //<----------Hier stürtzt alles ab.... }Ich denke jeder dürfte jetzt das Problem erkennen.
-
calloc(strlen(buffer) + 1, 1);
-
Leider stürtzt des Programm immer noch bei free() ab.
-
bei mir nicht
#include <windows.h> #include <process.h> #include <iostream> unsigned __stdcall cmd(void* message) { free(message); return 0; } int main() { const char* buffer = "Hallo"; char *p = (char*)calloc(strlen(buffer) + 1, 1); strcpy(p, buffer); _beginthreadex(NULL,0,cmd,p,0,NULL); std::cin.get(); }
-
Es lag tatsächlich an folgenden:
p = (char*)calloc(strlen(puffer)+1,1);Wenn ich es jetzt so wieder mache:
p = calloc(strlen(puffer)+1,1);Dann stürtzt des Programm doch wieder ab.
Kannste mir des mal kurz erklären warum es mit einem cast (char*) klappt?
-
keine ahnung! den cast braucht man nur wenn man c++ benutzt. unter c ist der cast nicht nötig und nicht empfehlenswert.
hier steht's: http://www.c-plusplus.net/forum/viewtopic.php?t=206606
-
ich habs nochmal in c und ohne cast probiert. stürzt auch nicht ab. der fehler liegt bestimmt woanders.
-
Ok das ganze Programm läuft jetzt eigentlich bis auf eine kleinigkeit.
//main Thread char *b = NULL; if(b == NULL) //bedingung x = _beginthreadex(NULL,0,split_cmd,b,0,NULL); //thread aufruf//thread unsigned __stdcall split_cmd(void* message) { free(message); message = NULL;Doch leider zeigt b im "Mainthread" nach ausführung des "Nebenthreads" nicht auf NULL.
-
lass die finger von threads wenn du solche grundlagen nicht verstanden hast.
-
Ich denke das Problem hat weniger mit Threads zu tun.

-
Martin Schmid schrieb:
Ich denke das Problem hat weniger mit Threads zu tun.

Ich denke du hast vollkommen Recht

-
hustbaer schrieb:
Ich denke du hast vollkommen Recht

Schön das mir mal jemand recht gibt.

Aber woran liegt es dann?