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 사용법을 좀 알아봐야겠네요~^^
댓글 달기