Segmentation fault (core dumped) 이 발생하는데 이유를 모르겠어요
글쓴이: noard / 작성시간: 금, 2009/10/16 - 3:16오후
#include "main.h" struct PCINFO { string pname; int arrtime; int srvtime, srvdtime, tt, wt; string srvst; bool flg; }pcinf[MAXPC]; int Tst,Ast,pcnum; float Twt,Awt; void cpuschedule::Getdata(char* fn) { int i=0, j=0; struct PCINFO tmp; Tst = 0; ifstream fin(fn); if(!fin) cout<<"Data file is not exist!"<<endl; while(!fin.eof()) { fin >> pcinf[pcnum].pname >> pcinf[pcnum].arrtime >> pcinf[pcnum].srvtime; ++pcnum; } fin.close(); cout<<pcnum<<endl; --pcnum; cout<<"File open is succcess"<<endl; for (i=0; i<pcnum; i++) { pcinf[i].flg = 0; } Tst+= pcinf[0].arrtime; for (i=pcnum;i>=1; i--) { for(j=1;j<pcnum; j++) { if(pcinf[j-1].arrtime>pcinf[j].arrtime) { tmp = pcinf[j-1]; pcinf[j-1] = pcinf[j]; pcinf[j] = tmp; } } } /* for (i=0; i<pcnum;i++) { cout<<pcinf[i].pname << " "<< pcinf[i].arrtime <<" "<< pcinf[i].srvtime << endl; } */ } void cpuschedule::Srt(){ int i=0,j=0,k=0,l,cnt=0; cpuschedule c; /* for (i=0; i<pcnum;i++) { cout<<pcinf[i].pname << " "<< pcinf[i].arrtime <<" "<< pcinf[i].srvtime << endl; } */ while(cnt<MAXCPUTIME) { if(cnt<pcinf[0].arrtime){ for(l=0; l<pcnum; l++){ pcinf[l].srvst+=' '; } cout<<"state1"<<endl; c.Print(cnt); cnt++; continue; }else if(cnt==pcinf[0].arrtime){ for(l=0; l<pcnum; l++){ if(l==0){ pcinf[l].srvst+='-'; pcinf[l].srvdtime++; } else pcinf[l].srvst+=' '; } c.Print(cnt); cnt++; continue; } for(i=0; cnt>pcinf[i].arrtime;) i++; j=i; for(i=0; i<=j; i++){ if(pcinf[i].flg!=1){ k=i; break; } } // cout<<"k = "<<k<<" k가 완료되지 않은 제일 먼저 도착한 값을 가리키게 된다"<<endl; for(i=0; i<j; i++) { if(pcinf[i].flg!=1 && (pcinf[i].srvtime-pcinf[i].srvdtime < pcinf[k].srvtime-pcinf[k].srvdtime)) { k=i; } } // cout<<"k = "<<k<<" k가 완료되지 않은 제일 작은 Servetime을 가진 값을 가리키게 된다"<<endl; if(pcinf[k].srvtime-1==pcinf[k].srvdtime){ for(l=0; l<pcnum; l++){ if(l==k){ pcinf[l].srvst+='+'; pcinf[l].srvdtime++; pcinf[l].flg=1; } else pcinf[l].srvst+=' '; } cout<<"state2"<<endl; c.Print(cnt); cnt++; continue; } else if(pcinf[k].srvtime-1>pcinf[k].srvdtime){ for(l=0; l<pcnum; l++){ if(l==k){ pcinf[l].srvst+='-'; pcinf[l].srvdtime++; } else pcinf[l].srvst+=' '; } cout<<"state3"<<endl; c.Print(cnt); cnt++; continue; } } } void cpuschedule::Print(int cnt){ int i, j; for(i=0; i<cnt; i++){ system("clear"); cout<<cnt<<"번째 화면"<<endl; for(j=0; j<=pcnum; j++){ cout<<pcinf[j].pname<<"\t"<<pcinf[j].srvst<<endl; } } sleep(1/2); }
파일에서 데이터를 입력받고 분리 한다음에 스케쥴링 하는 프로그램인데요
20여번 정도 까지 실행이 되다가 세그멘테이션 오류가 발생하는데..
이유를 못찾겠네요..
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 10.88 KB |
Forums:
GDB로 돌려보세요
GDB로 해당 프로그램 돌려 보시구요
아마 GDB에서도 segmentation fault 발생할 거에요
그때 어떤 메모리 주소에서 발생한건지 출력해 줄 겁니다.
그 주소 부근의 어셈블리 코드 확인하시고 C 코드에서 어느 부근인지 살펴보세요
보통 segmentation fault 는 버퍼 문제가 많으니 그 근처를 중심으로 보심이 ^^
-------- 시그내쳐 ---------
열심히 열심히 열심히 ..
음악을 하는것 처럼!!
답변 고맙습니다~~
GDB 사용법을 좀 알아봐야겠네요~^^
댓글 달기