我正在尝试实现最近最少使用的算法程序。我正在提示用户输入帧大小。 如果我提示并输入6以下的任何内容,那么它就可以正常工作。如果我输入6及以上的任何值,它会在读取输入流(文件)并将其添加到类时抛出异常。
inputStream >> pid;
inputStream >> ref;
文件有7-8行我只在这里显示2。
1 45
1 46
这是我班级和主要()
的一部分class pagetable
{
public:
int pid;
int ref;
int faults;
pagetable();
};
pagetable::pagetable(){
pid = 0;
ref = 0;
faults = 0;
}
main()的
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);
}
}
所以,现在我调用一个运行LRU算法的函数。 这就是当我将文件解析到类时我得到错误的地方。我评论了我犯错误的一行。
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);
它抛出错误的地方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()
}
这可能是我的初始化方式吗?我需要将它们初始化为零,因为稍后我会检查空槽。
我真的不明白,因为那时我没有在课堂上添加任何东西。
谢谢。
编辑:我在课堂上注释了初始化,并且不再抛出异常了。答案 0 :(得分: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