최소 최근에 사용한 알고리즘 프로그램을 구현하려고합니다. 사용자에게 프레임 크기를 묻습니다. 내가 프롬프트하고 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으로 초기화해야합니다.
저는 그 시점에서 클래스에 아무 것도 추가하지 않기 때문에 실제로 얻지 못합니다.
감사합니다.
편집 : 나는 클래스에서 초기화하고 더 이상 예외를 던지지 않는다고 주석 처리했습니다.
예외 정보를 게시 할 수 있습니까? 이'pagetable * page = new pagetable [frames];를 원하십니까? 나는 '그 동안'을 둘러싼 것이 무엇인지 모르지만 할당이 거기에 속하는지 의심 스럽다. – evanmcdonnal