c中的Return不结束方法
编辑-我算出了算术错误,但仍然有返回错误 由于某种原因,我的程序给了我两个错误。第一个错误是,我的每个方法()末尾的“return”并没有结束该方法,并将我带回main。我的第二个问题在第23行,其中pfNum=mainSize/pageSize;是不是给了我一个“SIGFPE,算术异常”不知道为什么这两种情况都会发生有人能帮我吗 谢谢c中的Return不结束方法,c,return,C,Return,编辑-我算出了算术错误,但仍然有返回错误 由于某种原因,我的程序给了我两个错误。第一个错误是,我的每个方法()末尾的“return”并没有结束该方法,并将我带回main。我的第二个问题在第23行,其中pfNum=mainSize/pageSize;是不是给了我一个“SIGFPE,算术异常”不知道为什么这两种情况都会发生有人能帮我吗 谢谢 #include <stdio.h> #include <stdlib.h> #include <math.h> /* D
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* Define page table as dynamic structure containing virtual page and page frame
and initialize variable as pointer to structure */
struct table{
int vp;
int pf;
}*pageTable = NULL;
/* Declare global var's */
int mainSize,pageSize,policy,pfNum;
/**********************************************************************/
void option1(){
/* Declare local var's */
int k;
/* Prompt for main memory size, page size, and replacement policy */
printf("Enter main memory size(words): ");
scanf("%d",&mainSize);
printf("Enter page size(words/page): ");
scanf("%d",&pageSize);
printf("Enter replacement policy(0=LRU, 1=FIFO): ");
scanf("%d",&policy);
pfNum = mainSize/pageSize;
/* Allocate and initialize page table based on number of entries */
pageTable = malloc(pfNum *sizeof(pageTable));
for(k=0;k<pfNum;k++){
pageTable[k].vp=-1;
pageTable[k].pf=k;
}
return;
}
/**********************************************************************/
void option2(){
/* Declare local var's */
int va,page,offset,i=0,temp;
/* Prompt for virtual address */
printf("Enter virtual memory address to access: ");
scanf("%d",&va);
/* Translate virtual mem addr to virtual page and offset*/
page = va/pageSize;
offset = va%pageSize;
/* Check for end of table, unallocated entry, or matched entry in table
and update table appropriately; while none of three cases, keep looping */
while(i<pfNum && pageTable[i].vp!=1 && pageTable[i].vp!=page)
i++;
if(i<=pfNum){
int j;
temp = pageTable[0].pf;
for(j=1;j<pfNum;j++)
pageTable[j-1]=pageTable[j];
pageTable[j].vp=page;
pageTable[j].pf=temp;
printf("Page Fault!");
}
else if(pageTable[i].vp==-1){
pageTable[i].vp = page;
printf("Page fault!");
}
else if(pageTable[i].vp==page){
temp = pageTable[i].pf;
int l,address;
for(l=i+1;l<pfNum-1;l++)
pageTable[l-1]=pageTable[l];
pageTable[l].vp = page;
pageTable[l].pf = temp;
address = (temp*pageSize)+offset;
printf("Virtual address %d maps to physical address %d",va,address);
}
return;
}
/**********************************************************************/
void option3(){
/* Declare local var's */
int u;
for(u=0;u<pfNum;u++ && pageTable[u].vp!=-1)
printf("VP %d --> PF %d",pageTable[u].vp,pageTable[u].pf);
/* Print out each valid virtual page and page frame pair in table */
return;
}
/**********************************************************************/
int main(){
/* Declare local var's */
int choice;
/* Until user quits, print menu of options, prompt for user input, and select appropriate option */
printf("/n");
printf("Virtual memory to Main memory mapping:\n");
printf("--------------------------------------\n");
printf("1) Set parameters\n");
printf("2) Map virtual address\n");
printf("3) Print page table\n");
printf("4) Quit\n");
printf("\n");
printf("Enter Selection: ");
scanf("%d",&choice);
printf("\n");
while(choice!=4){
if(choice==1)
option1();
else if(choice==2){
option2();
}
else if(choice==3)
option3();
}
printf("Goodbye. Have a nice day.");
return 1;
}
#包括
#包括
#包括
/*将页表定义为包含虚拟页和页框的动态结构
并将变量初始化为指向结构的指针*/
结构表{
int-vp;
int-pf;
}*pageTable=NULL;
/*声明全局变量*/
int mainSize、pageSize、policy、pfNum;
/**********************************************************************/
无效期权1(){
/*声明本地变量*/
int k;
/*提示输入主内存大小、页面大小和替换策略*/
printf(“输入内存大小(字):”;
scanf(“%d”、&mainSize);
printf(“输入页面大小(字/页):”;
scanf(“%d”、&pageSize);
printf(“输入替换策略(0=LRU,1=FIFO):”;
scanf(“%d”和策略);
pfNum=mainSize/pageSize;
/*根据条目数分配和初始化页表*/
pageTable=malloc(pfNum*sizeof(pageTable));
对于(k=0;k而言,“SIGFPE,算术异常”异常最有可能是由零除引起的。一个问题是,一旦您做出了初始选择,没有任何东西会再次改变选择,因此程序会循环执行您的初始选择(可能什么也不做,因为您不验证零、负选择或大于4的值)。这可能会让您的函数看起来“不返回”,但实际上它们确实返回;它们几乎会立即再次被调用
您可能每次在循环中都需要提示输入一个新的选项,这建议使用一个函数来提示并返回您在while
循环中调用的选项
您至少有一条“/n”
可能是您想要的“\n”
。您的告别消息缺少换行符;其他许多消息(如“页面错误!”
消息)也没有换行符。您没有检查输入功能是否成功。您没有检查内存分配是否成功
您的SIGFPE可能来自零除法;在执行除法之前打印您正在处理的值。并从void
s中删除所有return
s。它们都是无效的,因为它们都位于void函数的末尾。应该这样做。嗯,不起作用。在我做出选择之后,程序就停在那里了你的意思是,我的每个方法()末尾的“return”并没有结束这个方法,而是让我回到main?您将return
s放在每个方法的末尾-方法结束的地方。您希望这些return
语句做什么?它们的程序在我做出选择后就开始运行。对于选择1,它会不断问我相同的问题,直到SIGFPE算术异常弹出。请尝试使用调试器查看为什么y我们的方法似乎没有返回。在while
循环之前,您也只设置了一次choice
的值。每次循环运行时,您都需要输入另一个菜单选项。就是这样,我将while循环的开头放在了错误的位置……我应该在开始打印问题之前将其放好。