我正在学习如何使用pthread函数。 在这里,我想使用pthread_create创建一个线程,并用它计算一些数字的平均值。 (数字序列末尾的0显示已完成)
这是我到目前为止所写的:
#include<stdio.h>
#include<stack>
#include<pthread.h>
using namespace std;
void *Thread1(void*argument)
{
printf("in Thread1\n");
int sum=0;
int count=0;
stack<int> numbers;
(stack<int>) numbers = *((stack<int>*) argument);
int size = numbers.size();
while(numbers.size()!=0)
{
sum=sum+numbers.top();
count=count+1;
numbers.pop();
}
int result= sum / count;
printf("Average is :");
printf("%d",result);
pthread_exit(0);
}
int main(void)
{
printf("Enter your numbers\n");
int num;
stack<int> numStack;
scanf("%d",&num);
numStack.push(num);
while( num!=0)
{
scanf("%d",&num);
numStack.push(num);
}
numStack.pop();
pthread_t myThread;
int ret;
ret=pthread_create(&myThread,NULL,Thread1,&numStack);
if (ret<0)
printf("Thread Creation Failed\n");
pthread_join(myThread,NULL);
return 0;
}
当我在main中获取堆栈的大小并通过打印来检查它时,它是正确的但是当我在Thread1函数中执行相同操作时,大小为0.因此我得到了
Floating point exception (core dumped)
错误。
为什么我的堆栈大小变为0?我该如何解决这个问题?
提前致谢
答案 0 :(得分:4)
此
(stack<int>) numbers = *((stack<int>*) argument);
cast是零大小集的根。第一个C-Type强制转换创建一个临时的未命名对象,作为在赋值后消失的数字副本。 numbers
永远不会改变。成功:
numbers = *((stack<int>*) argument);