#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int mms;
int ps;
int rp;
struct node{
int *pf;
int *vp;
} *pt=NULL;
void enter_params(){
printf("Enter main menmory size(words):_\n");
scanf("%d",&mms);
printf("Enter page size (word/page):_\n");
scanf("%d",&ps);
printf("Enter replacement policy(0=LRU, 1=FIFO):_\n");
scanf("%d",&rp);
}
void mapVirtualAddress(){
int VA;
int offset;
int tag;
int numEntries;
int k;
int pa;
int i;
i=0;
printf("Enter virtual memory address to access:_\n");
scanf("%d",&VA);
tag = VA/ps;
offset = VA%ps;
while((i<numEntries)&&(pt[i].vp!=vp)&&(pt[i].vp!=-1))
i++;
if(i==numEntries){
pf = pt[0].pf;
for(k=0; k<numEntries-2; i++)
pt[k] = pt[k+1];
pt[numEntries-1].vp = vp;
pt[numEntries-1]pf = pf;
printf("Page fault!");
}
else if(pt[i].vp==-1){
pt[i].vp = vp;
pt[i].pf = i;
printf("Page fault!");
}
else{
pa = pt[i].pf*ps+offset;
}
if(rp == 1){
printf("Do nothing");
}
else{
while((k<numEntries-1)&&(pt[i+1].vp!=-1)){
pt[k] = pt[k+1];
k++;
}
}
}
void printPT(){
int i;
pt[i].vp;
pt[i].pf;
while((pt[i].vp!=-1)&&(i<pt[i].vp)){
printf("VP %d --> PF %d;",vp,pf);
i++;
}
}
1 に答える
1
助けを求めている場合は、誰かが助けてくれるようにできる限り簡単にしてください。そう言っているところにコメントを追加することもできます。
答えは次のとおりです。どちらも struct 内で宣言されています。pf または vp を直接使用することはできません。構造体の変数を宣言してから、構造体を介してそれらを使用する必要があります。
あなたの例ではpt->pf
or pt->vp
(もちろん pt を割り当てたら.
そして、ここpf = pt[0].pf;
で pf は宣言された場所ではなく、コンパイラーが教えてくれます。
さらに、numEntries が割り当てられることはないため、コードは未定義の結果を生成します。
ある程度実行可能なコードを投稿してください。
h番目
マリオ
于 2011-04-04T05:19:01.307 に答える