2 u012540439 u012540439 于 2013.11.21 22:12 提问

用new申请了一个结构体数组,delete时内存错误

strong text //////////////////////////////////////CLOCK算法部分//////////////////
void CLOCK()
{
arr *page_t;
int i,j,pointer,times=0,flag=-1,num=0;//pointer为查找位置
page_t=new arr[m];
//==============================开始计算=============
if(n<=m)
cout<<"No fault.\n";//如果n<=m不可能缺页
else
{//当n>m时,计算缺页次数
for(i=0,j=0;i<n;i++)
{
if(i==0) {page_t[j].e =page[i];page_t[j].yes =1;num++;}
else
{
flag=-1;//若发现缺页,则值应该不变,否则为正数
for(j=0;j<num;j++)//所需页面是否已在页框中
if(page_t[j].e ==page[i])
{
page_t[j].yes =1;//再次进入页框时又被标记为1
flag=j;break;
}
if(flag<0)//1缺页或者2页框还未满
{
if(num<m)//2页框未满时
{
page_t[num].e =page[i];
page_t[num].yes =1;
num++;
}
else
{//1如果缺页
for(pointer%=m; ; ++pointer%=m)//循环查找为0的页框
if(page_t[pointer].yes ==0)
{//找到置换它,缺页次数+1,置换后yes置1
page_t[pointer].e =page[i];
page_t[pointer].yes =1;
++pointer%=m;
times++;break;
}
else//未置换,标志位置0
page_t[pointer].yes =0;
}
}//if
}//else
}//for
cout<<"缺页率:times/m = "<<times<<"/"<<m<<"= "<<(float)times/m<<endl;
}//else
delete []page_t;
}/////////////////////////////CLOCK算法结束、、、、、、、、

int main()
{
Initial();
CLOCK();
delete []page;
}
其中page[n]是整型的页面号2 3 2 1 5 2 4 5 3 2 5 2(12个);页框为m=3个
//全局变量:
int m, n;//:m=物理块数,n=页面总项;
int * page;//:存放页面

void Initial()
{
cout<<"请输入物理块数:m = ";
cin>>m;
cout<<"\n请输入页面总项:n = ";
cin>>n;
page=new int[n];
cout<<"请输入各个页面号,以空格号间隔:\n";
for(int i=0;i cin>>page[i];
}

有点乱,哪儿出问题了呢?指点新手谢谢

Csdn user default icon
上传中...
上传图片
插入图片