arg
- локальная переменная, определенная в foo
- она будет уничтожена, как только эта функция завершится, но myFunc
, работающая в другом потоке, все равно будет пытаться получить к ней доступ.Вы должны выделить arg
в куче и уничтожить его в потоке после того, как вы закончите.
void foo(int a, int b) {
HANDLE handle;
t *arg;
arg = (t *)malloc(sizeof(t));
arg->data1 = a;
arg->data2 = b;
handle = (HANDLE) _beginthread( myFunc, 0, (void*) arg);
}
void myFunc(void *param) {
t *args = (t*) param;
int x = args->data1;
int y = args->data2;
printf("x=%d, y=%d\n", x, y);
free(args);
}
Также обратите внимание, что HANDLE
должно быть всеми заглавными буквами.