gpt4 book ai didi

c++ - 以下lru代码中的逻辑错误是什么

转载 作者:行者123 更新时间:2023-11-28 03:39:33 26 4
gpt4 key购买 nike

我想使用以下代码为我的应用程序进行非常简单的 lru 页面替换。 buf_rec 的第二个和第三个元素的计数器 始终具有相同的值,我不明白为什么。

#include<stdio.h>
#include<conio.h>

typedef struct search_cache_rec
{
int index;
int counter;
}search_cache_rec;
search_cache_rec buf_rec[3];
void inint_buf()
{
for(int m=0;m<3;m++)
{
buf_rec[m].index=-1;
buf_rec[m].counter=100;
}
}
int i,j,fs[3];
int ind,k,l,flag1=0,flag2=0,pf=0,frsize=3;

bool search_cache(int *id)
{
bool status=false;
flag1=0,flag2=0;

for(i=0;i<3;i++)
{
if(buf_rec[i].index==*id)
{
flag1=1;
flag2=1;
*tanker_id=i;
buf_rec[i].counter+=2;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return true;
}
}
if(flag1==0)
{
for(i=0;i<3;i++)
{
if(buf_rec[i].index==-1)
{
buf_rec[i].index=*id;
flag2=1;
*tanker_id=i;
buf_rec[i].counter+=2;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return false;
}
}
}
if(flag2==0)
{
int min=buf_rec[0].counter;

for(i=0;i<3;i++)
{
if(min>buf_rec[i].counter)
{
min=buf_rec[i].counter;
ind=i;
}
}
buf_rec[ind].index=*id;
buf_rec[i].counter+=2;
*id=i;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return false;
}


}
void display()
{
int i;
printf("\n");
for(i=0;i<3;i++)
printf("\t%d",buf_rec[i].index);
}

我是这样用的

#include"lru.h"
#include<string>
#include<iostream>


void main()
{
int num;
inint_buf();
display();
std::cout<<"\nEnter a num\n";
std::cin>>num;
while(num!=-1)
{
search_cache(&num);
display();
std::cout<<"\nEnter a num\n";
std::cin>>num;
}
}

最佳答案

一个可能的问题是您在几个地方的两个嵌套 for 循环中使用了全局变量 i,这将导致外部循环过早完成。您几乎总是希望对嵌套循环使用不同的循环变量。

例如:

for(i=0;i<3;i++)
{
if(buf_rec[i].index==*id)
{
flag1=1;
flag2=1;
*tanker_id=i;
buf_rec[i].counter+=2;

for(j=0;j<3;j++) //Note change from i to j
{
buf_rec[j].counter--;
}
return true;
}
}

我还建议不要对循环变量使用全局变量,而是更喜欢这样的东西:

for (int i = 0; i < 3; ++i)
{
}

除非您仍在使用一些旧的编译器(例如 VC6 对这种形式的变量定义有问题)。

关于c++ - 以下lru代码中的逻辑错误是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com