То, что вы делаете, это передача по значению. Это нормально, если sizeof(T) <= sizeof(void*)
для типа T
, который вы пытаетесь передать.
Если это не так, вы должны создать T
в куче, так как это может быть вне области, когда созданный поток пытается получить к нему доступ:
T* t = new T(someValue);
rc = pthread_create(&threads[t], NULL, PrintHello, (void*)t);