>> Edit article
이름
제목
패스워드
window에서는 tc 2.01로 잘만 되던 프로그램이 리눅스에서 gcc로 컴파일 한 후 실행하면 "Segmentation fault"라는 오류메세지가 나옵니다. 의문점은 이들이 컴파일 시에는 전혀 에러 메세지가 나오지 않다가 컴파일 된 파일을 실행시키면 나온다는 겁니다. 문제의 프로그램들은 다음과 같습니다. 먼저 이건 날짜를 넣으면 그 해에 지나간 날수를 출력하고 햇수와 지나간 날짜를 넣으면 거꾸로 날짜를 출력하는 프로그램임다. 문제의 'Segmentation fault'가 발생하는 부분은 [[,]]안의 부분입니다. #include<stdio.h> char *smonth[12]={"January","February","March","April","May","June","July","August","September","October","November","December"}; char daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; void day_of_year(int year,int month,int *day){ int i, leap; leap= year%4==0&&year%100!=0||year%400==0; for(i=1;i<month;i++) *day+=daytab[leap][i]; return *day; } void month_day(int year,int yearday,int *pmonth,int *pday){ int i,leap; leap= year%4==0&&year%100!=0||year%400==0; for(i=1;yearday>daytab[leap][i];i++) yearday-=daytab[leap][i]; *pmonth=i; *pday=yearday; } main(){ int day,month,year,days,*yday; int *pmonth,*pday; char t; printf("%s%s",*(smonth+1),*(smonth+2)); printf("If you want know days from date, type 'd',"); printf(" and date frem days, type 'm'."); scanf("%c",&t); switch(t){ case 'd': goto days; case 'm': goto date; default : printf("Error : Type d or m");exit(3); } days: printf("Input year, month, and day :"); [[scanf("%d%d%d",&year,&month,yday);]] <-- 메세지 발생 day_of_year(year,month,yday); printf("It is %dth day of year %d",*yday,year); exit(0); date: printf("Input year and days :"); scanf("%d%d",&year,&days); month_day(year,days,pmonth,pday); printf("The Date is %s %d, %d",*(smonth+*pmonth-1),*pday,year); exit(1); } 따라서 'date:'이하부분, 즉 날수를 날짜로 바꾸는 부분은 정상적으로 돌아갑니다. 아시는 분은 답변 부탁드리겠습니다. 그럼~--이 곳에 서명을 적어주십시오. 서명? ㅅ ㅓ ㅁ ㅕ ㅇ
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved