2012-11-19 5 views
0

최소 최근에 사용한 알고리즘 프로그램을 구현하려고합니다. 사용자에게 프레임 크기를 묻습니다. 내가 프롬프트하고 6을 입력하면 완벽하게 작동합니다. 6 이상으로 anyhing을 입력하면 입력 스트림 (파일)을 읽고 클래스에 추가 할 때 예외가 발생합니다.클래스 배열 크기로 처리되지 않은 예외가 발생했습니다.

inputStream >> pid; 
inputStream >> ref; 

파일에는 7-8 행이 있습니다. 여기에 2 개만 표시됩니다. 여기

1 45 
1 46 

그래서, 지금은 LRU 알고리즘을 실행하는 함수를 호출

while(!done){ 
pagetable* page = new pagetable[frames]; 
ifstream inputStream; 
getFileName(inputStream);//asks for input filename until it is valid 

cout << "\nEnter in the number of frames:"; 
cin >> frames; 
for (i = 0; i < frames; i++) { //initializing 
    page[i].pid = 0; 
    page[i].ref = 0; 


} 
faults = runsimLFU2(inputStream, page, frames); 

    void getFileName(ifstream &inputStream) //asks for input file until it is valid 
{ 
char filename[MAXFILE]; 
while (inputStream.is_open() == false) 
{ 
    inputStream.clear(); 
    cout << "\n"; 
    cout << "Input filename: "; 
    cin >> filename; 
    inputStream.open(filename); 
} 
} 

내 수업의 일부 주() 주

class pagetable 
{ 

public: 
int pid; 
int ref; 
int faults; 
pagetable(); 
}; 

pagetable::pagetable(){ 

pid = 0; 
ref = 0; 
faults = 0; 
} 

()입니다. 그게 내가 파일을 클래스에 구문 분석 할 때 오류가 발생합니다. 나는 오류가 발생하는 메신저 라인에 댓글을 달았습니다. 그것은 VS는 xlocale 파일을 제공하고, 내가

_CRTIMP2_PURE void __CLR_OR_THIS_CALL _Incref() 
     { // safely increment the reference count 
     _BEGIN_LOCK(_LOCK_LOCALE) 
      if (_Refs < (size_t)(-1)) //error 
       ++_Refs; 
     _END_LOCK() 
     } 

는 내가 초기화하고 어떻게 할 수 있는지 라인 주석에서 오류가 발생

int runsimLFU2(ifstream &inputStream, pagetable* page, int frames){ 

int i =0; 
int j=0; 
int pid =0; 
int ref = 0; 
int index = 0; 
int count = 0; 
int pagefaults = 0; 
int lowest=0; 

int counter = 1; 

int * LRU; 
LRU = new int[frames]; 


while(1){ 

    inputStream >> pid;  //Error if frame is 6 or more 
    inputStream >> ref; 
    if(inputStream.eof()) break; 
    while(count < frames) 
    { 

     index = searchForEmptySlotsLRU(page, frames); 

? 나중에 빈 슬롯을 확인하기 때문에 0으로 초기화해야합니다.

저는 그 시점에서 클래스에 아무 것도 추가하지 않기 때문에 실제로 얻지 못합니다.

감사합니다.

편집 : 나는 클래스에서 초기화하고 더 이상 예외를 던지지 않는다고 주석 처리했습니다.

+0

예외 정보를 게시 할 수 있습니까? 이'pagetable * page = new pagetable [frames];를 원하십니까? 나는 '그 동안'을 둘러싼 것이 무엇인지 모르지만 할당이 거기에 속하는지 의심 스럽다. – evanmcdonnal

답변

0

메모리가 손상되었습니다.

이 정말 비린내 같습니다

프레임의 값이 처음으로 무엇
while(!done){ 
    pagetable* page = new pagetable[frames]; 
    ifstream inputStream; 
    getFileName(inputStream);//asks for input filename until it is valid 

    cout << "\nEnter in the number of frames:"; 
    cin >> frames; 
    for (i = 0; i < frames; i++) { //initializing 
     page[i].pid = 0; 
     page[i].ref = 0;  
    } 

? cin 아래로 이동해보십시오.

while(!done){ 
    ifstream inputStream; 
    getFileName(inputStream);//asks for input filename until it is valid 

    cout << "\nEnter in the number of frames:"; 
    cin >> frames; 
    pagetable* page = new pagetable[frames]; 
    for (i = 0; i < frames; i++) { //initializing 
관련 문제