类数组大小的未处理异常

时间:2012-11-19 00:24:31

标签: c++ arrays class

我正在尝试实现最近最少使用的算法程序。我正在提示用户输入帧大小。 如果我提示并输入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()
        }

这可能是我的初始化方式吗?我需要将它们初始化为零,因为稍后我会检查空槽。

我真的不明白,因为那时我没有在课堂上添加任何东西。

谢谢。

编辑:我在课堂上注释了初始化,并且不再抛出异常了。

1 个答案:

答案 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