Reputation: 3423
I have a thread to which i wish to pass 3 arguments. So, i put them in a struct as follows:
struct arg
{
time_t time1;
float name1;
time_t quantum1;
};
I passed the arguments the following way:
arg arg1;
arg1.time1=(time_t)(int)job.peek(); //job.peek() was 3
cout<<"job time is "<<arg1.time1<<endl; //this output 3
arg1.name1=(float)(int)job.returnname(NULL); //job.returnname() was 1
cout<<"job name is "<<arg1.name1<<endl;// this output 1
arg1.quantum1=quantum; //quantum was 7
cout<<"quantum is "<<arg1.quantum1<<endl;//this output 7
pthread_create(&thread1, NULL, func3, (void*)(&arg1));
But when i checked these values at the beginning of the thread itself, they were changed.
void* timer(void *argum)
{
arg *arg1= (arg*)argum;
cout<<"PROCESS "<<arg1->name1<<" HAS ENTERED THE TIMER"<<endl; //this output arg1->name1 as 1.4013e-45
cout<<"Time remaining for process is "<<arg1->time1<<endl; //this output arg1->time1 as -1218381144
cout<<"quantum is "<<arg1->quantum1<<endl; //this output arg1->quantum1 as 5
}
Can anybody tell me why this happened?
Thanks in advance!!
Upvotes: 0
Views: 150
Reputation: 2294
The problem is that you allocated arg1
on the stack, and that memory got out of scope and reused before the thread started executing. Allocate the arg object on the heap using malloc
or new
, and don't forget to de-allocate it after you're done, usually from within the thread you created.
Upvotes: 2
Reputation: 15085
You should not pass the address of a local object (i.e. created on stack) out of the function. You should allocate it using malloc
/new
.
Upvotes: 2