pthread 로 fibonacci 만드는데 segmentation 오류가 자꾸 나네요
13 번째 까지 잘 나오다가
14 번째 값에서 바로 오류가 납니다
그렇게 큰 숫자도 아닌데 오류가 나니 너무 당혹스러운데 해결법좀 알려주세요 ..
#include
#include
#include
void *runner(void *param);
int main(int argc, char** argv)
{
long *final_result;
int fibo_num;
fibo_num = atol(argv[1]);
pthread_t tid;
pthread_create(&tid,NULL,runner,&fibo_num);
pthread_join(tid, (void**)&final_result);
printf("결과 : %lu 입니다.",*final_result);
return 0;
}
void *runner(void *param)
{
int number;
long *sum;
int temp_num1, temp_num2;
long *result1, *result2;
pthread_t child_tid1, child_tid2;
number = *((int *)param);
sum = (long*)malloc(sizeof(long));
if(number <= 0)
{
*sum = 0;
pthread_exit(sum);
}
if(number == 1 || number == 2)
{
*sum = 1;
pthread_exit(sum);
}
else
{
temp_num1 = number - 1;
temp_num2 = number - 2;
pthread_create(&child_tid1,NULL,runner,&temp_num1);
pthread_join(child_tid1,(void *)&result1);
pthread_create(&child_tid2,NULL,runner,&temp_num2);
pthread_join(child_tid2,(void *)&result2);
*sum = *result1 + *result2;
pthread_exit(sum);
}
}
스레드를 생성할때마다 부모 프로세스의 stack 을
스레드를 생성할때마다 부모 프로세스의 stack 을 나눠 먹습니다.
디폴트로 사용하는 스택 사이즈를 줄이거나 할당해서 지정하는 방법을
사용해 보세요
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
....
malloc - free 부터 확실하게 하세요....
댓글 달기