in reply to XS: free() outside of the main thread causes crash on Windows

For standalone testing purposes, you can run this as an Inline::C script:
use strict; use warnings; use Inline C => Config => USING => 'ParseRegExp', BUILD_NOISY => 1, ; use Inline C => <<'EOC'; #include <pthread.h> void *thread(void *arg) { char *msg = (char*)arg; printf("thread: %s\n", msg); free(msg); return NULL; } void test_thread(char *msg) { char *thread_arg = malloc((strlen(msg)+1)*sizeof(char)); strcpy(thread_arg, msg); pthread_t tid; pthread_create(&tid, NULL, thread, (void*)thread_arg); void *rv; pthread_join(tid, &rv); } EOC test_thread("Just another XS hacker");
Like you say, that crashes on Windows unless "free(msg;" is commented out. At least that's what I'm seeing on Strawberry-5.20.0.
But it looks to me that the memory for "msg" has not been dynamically allocated, and therefore shouldn't be set free().

If you want to free() the memory what was malloc()'ed you can free(thread_arg); at the end of the test_thread() sub.
However, I'm guessing that defeats the purpose of the demo. (Sorry - complete threads-idiot, here. Does the memory have to be free()'d in the thread sub ?)

Cheers,
Rob