📄 subject_59554.htm
字号:
<p>
序号:59554 发表者:about blank 发表日期:2003-11-08 17:09:02
<br>主题:对VC 6报有怀疑的人看这里
<br>内容:我在做一个银行家算法的时候,发现了V6的一点问题:在自定义函数调用的时候,同样的代码经常出现:ACCESS VIOLATION的警告,然后调试窗口跳到内存地址的图象上(见附图),但是有时却可以通过,我用同样的代码在VC7甚至TC上都可以通过,并且查代码错误已经快要暴头了,别人说大概是VC6的BUG,但是我觉得还是自己代码的逻辑错误。<BR>代码和错误图象都在附件中,求教<BR> 至诚
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-08 17:13:44
<br>内容:你给个出错的输入阿!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-08 17:16:24
<br>内容:算了算了<BR>晚上我复习一下银行家算法了给你看
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:about blank 回复日期:2003-11-08 17:20:55
<br>内容:输入:1,1,0,2<BR>在VC7中的回答是正确的‘COMPLETE’
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:about blank 回复日期:2003-11-08 17:27:18
<br>内容:即使在追踪过程中,在PROCESS()里一步一步走,只要PROCESS一结束,回到MAIN中,马上抱错,我都郁闷了,好汉,留下QQ
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-08 17:29:42
<br>内容:please input your request:user(0~4):<BR>1<BR>input the number of resource a:<BR>1<BR>input the number of resource b:<BR>0<BR>input the number of resource c:<BR>2<BR>sorry,we cannot help you!<BR>Press any key to continue<BR>我怎么没出错阿<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:about blank 回复日期:2003-11-08 17:31:47
<br>内容:是用V6吗,难道是我的有问题?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:about blank 回复日期:2003-11-08 17:34:41
<br>内容:麻烦您老追踪一下,SAFETY——CHK()返回值是1吗,如果没中断,应该结果是”COMPLETE‘啊<BR>谢了,
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:xiongli 回复日期:2003-11-08 17:41:05
<br>内容:please input your request:user(0~4):<BR>1<BR>input the number of resource a:<BR>1<BR>input the number of resource b:<BR>0<BR>input the number of resource c:<BR>2<BR>safety_chk's result 0<BR>sorry,we cannot help you!<BR>Press any key to continue<BR><BR><BR><BR><BR>修改后的代码如下:<BR>#include<stdio.h><BR>struct claim<BR>{<BR> int user;<BR> int num[3];<BR>}claims;<BR>int input()<BR>{<BR> printf("please input your request:user(0~4):\n");<BR> scanf("%d",&claims.user);<BR> printf("input the number of resource a:\n");<BR> scanf("%d",&claims.num[0]);<BR> printf("input the number of resource b:\n");<BR> scanf("%d",&claims.num[1]);<BR> printf("input the number of resource c:\n");<BR> scanf("%d",&claims.num[2]);<BR> return 1;<BR>}<BR>int safety_chk(int alloc[][3],int need[][3],int avail[3])<BR>{<BR> int work[3],finish[5];<BR> for(int p=0;p<5;p++)//i大于2后对WORK是无意义的<BR> {<BR> work[p]=avail[p];<BR> finish[p]=0;<BR> }<BR> for(int i=0;i<5;i++) <BR> {<BR> if(finish[i]==0&&<BR> need[i][0]<=work[0]&&<BR> need[i][1]<=work[1]&&<BR> need[i][2]<=work[2] )<BR> {<BR> for(int j=0;j<3;j++)<BR> work[j]=alloc[i][j]+work[j];<BR> finish[i]=1;<BR> i=-1;//重头再来<BR> }<BR> }<BR> for(i=0;i<5;i++)<BR> {<BR> if(finish[i]==0)<BR> return 0;<BR> }<BR> return 1;<BR>}<BR><BR>int process(int alloc[][3],int need[][3],int avail[3])<BR>{<BR> int ret;<BR> input();<BR> for(int i=0;i<3;i++) //out of resource number<BR> {<BR> if(claims.num[i]>need[claims.user][i]||claims.num[i]>avail[i])<BR> return 0;<BR> }<BR> for(i=0;i<3;i++)//trying<BR> {<BR> avail[i]=avail[i]-claims.num[i];<BR> alloc[claims.user][i]=alloc[claims.user][i]+claims.num[i];<BR> need[claims.user][i]=need[claims.user][i]-claims.num[i];<BR> }<BR> if((ret=safety_chk(alloc,need,avail)==0))<BR> {<BR>/*****************************************************/<BR> printf("safety_chk's result %d \n",0);<BR> for(i=0;i<3;i++)<BR> {<BR> avail[i]=avail[i]+claims.num[i];<BR> alloc[claims.user][i]=alloc[claims.user][i]-claims.num[i];<BR> need[claims.user][i]=need[claims.user][i]+claims.num[i];<BR> }<BR> return 0;<BR> }<BR> else<BR> {<BR>/***************************************************/<BR> printf("safety_chk's result %d \n",1);<BR> }<BR> return 1;<BR>}<BR>void main()<BR>{<BR> int alloc[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};<BR> int need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};<BR> int avail[3]={3,3,2};<BR> if(process(alloc,need,avail)==0)<BR> printf("sorry,we cannot help you!\n");<BR> else printf("operation complete!\n"); <BR> return;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-08 17:42:25
<br>内容:偶除了跟mfc打交道的时候遇上过编译器乱来<BR>其他时候vc的编译器还是好样的!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:about blank 回复日期:2003-11-08 17:43:09
<br>内容:请你吃饭!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-11-08 17:45:21
<br>内容:不好意思<BR>刚刚吃了.谢谢你.<BR>你到底弄出来了没有阿
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-11-08 17:54:07
<br>内容:这个程序的确有问题,safe_chk()返回时候的stack被破坏了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-11-08 17:57:13
<br>内容:.<BR>2003-11-8 18:01:19
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -