pthread_create(&(tid[i]), &attr, runner, (void *) i);
You are passing the local variable i
as an argument for runner
, sizeof(void*) == 8
and sizeof(int) == 4
(64 bits).
If you want to pass i
, you should wrap it as a pointer or something:
void *runner(void * param) {
int id = *((int*)param);
delete param;
}
int tid = new int; *tid = i;
pthread_create(&(tid[i]), &attr, runner, tid);
You may just want i
, and in that case, the following should be safe (but far from recommended):
void *runner(void * param) {
int id = (int)param;
}
pthread_create(&(tid[i]), &attr, runner, (void*)(unsigned long long)(i));