vs2019,数组嵌套,警告C6385,读取无效,可读大小为n,但可能读取了x个字节
警告C6386,写入时缓冲区溢出
void LRU()
{
//为每一个用到的页面设置一个时钟,用到就开始计时,执行一条新指令,时钟+1,如果遇到相同页面,将时钟值置0
//int clock[page[i]]
//给每个页面做一个标记 bool pflag[page[i]]
bool pflag[320] = { false };
int clock[320] = { 0 };
double hit = 0;//记录击中次数
double miss = 0;//缺页次数
int flag = 0;//0 :hit;1:miss
int mflag = 0;//是否写入空闲块
int p=0;
//每次使用新算法 都要将内存块置空
for (int m = 3; m < 32; m++)
{
men[m] = -1;
}
for (int i = 0; i < tins; i++)//执行320条指令
{
for (int m = 3; m < 32; m++)//查看指令对应页是否已经写入内存块中
{
if (men[m] == page[i])//在内存块中
{
hit++;//命中次数+1
flag = 1;//标记是否命中
** p = page[i];
clock[p]++;//把这页加上时钟
pflag[p] = true;//这页出现过**
if (pflag[p] == true)//下次再出现同一页
{
clock[p] = 0;//重新计时
}
break;//命中就可以退出小循环
}
else { flag = 0; }
}
if (flag == 0)//缺页
{
miss++;//缺页次数+1
for (int m = 3; m < 32; m++)
{
if (men[m] == -1)//找到空闲块
{
men[m] = page[i];
p = page[i];
clock[p++];
pflag[p] = true;//这页出现过
if (pflag[p] == true)//下次再出现同一页
{
clock[p] = 0;//重新计时
}
mflag = 1;//标记找到空闲块
break;//找到一块空闲块就退出
}
else { mflag = 0; }
}
if (mflag == 0)//没有空闲块 采用最近最久未使用置换法:置换最近一段时间最久用不到的页面
{
int k = 0;
int max = clock[page[0]];
for (int str = 0; str < i; str++)//扫描前面的页面
{
if (clock[page[str]] > max)
{
max = clock[page[str]];
k = str;
}
}
men[k] = page[i];
}
}
}
越界的问题只能自己去找
可以加个try,catch,打印越界时的索引,看到底是什么变量越界,越界的时候数值是多少
你的代码不全,很多变量的定义没有
但是我随便一看,就看到你的m为什么是从3开始遍历的,0,1,2呢干什么去了