一道c语言题,编译无错误,调试时出现“0x00403c2c 指令引用的 0x00000001 内存”,该内存不能为read。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道c语言题,编译无错误,调试时出现“0x00403c2c 指令引用的 0x00000001 内存”,该内存不能为read。相关的知识,希望对你有一定的参考价值。

题目为:一次歌唱比赛,四位裁判为三位同学打分,最后得分为除掉最高和最低分后的平均分。以下为本人编写的程序,希望高手看看问题出在哪里!!谢谢!!
#include<stdio.h>
void main()

double average[3];
int totalmark[3];
int mark[3][4];
int i,j,max,min;
printf("请输入每个选手的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&mark[i][j]);
for(i=0;i<3;i++)

min=mark[i][0];
max=mark[i][0];
for(j=0;j<4;j++)
if(mark[i][j]<min)
min=mark[i][j];
if(mark[i][j]>max)
max=mark[i][j];


for(i=0;i<3;i++)

totalmark[i]=0;
for(j=0;j<4;j++)
totalmark[i]+=mark[i][j];
average[i]=(totalmark[i]-max-min)/2;



printf("%5s%5s%5s%5s%5s%d","NO",1,2,3,4,"aver");
for(i=0;i<3;i++)

printf("选手%d",i+1);
for(j=0;j<2;j++)
printf("%5d",mark[i][j]);
printf("%5d\n",average[i]);



#include<stdio.h>

int main() 

double mark[3][4],sum,max,min;

int i,j;

printf("请输入每个选手的成绩:\\n");

for(i = 0;i < 3;i++) 

for(j = 0;j < 4;j++) 

printf("第%d个同学的第%d个裁判给分 : ",i + 1,j + 1);

scanf("%lf",&mark[i][j]);

for(i = 0;i < 3;i++) 

sum = 0.0;

min = mark[i][0];

max = mark[i][0];

for(j = 0;j < 4;j++) 

sum += mark[i][j];

if(mark[i][j] < min) min = mark[i][j];

if(mark[i][j] > max) max = mark[i][j];

printf("第%d个同学的平均分是:%.2lf\\n",i + 1,(sum - max - min) / 2.0);

return 0;

参考技术A 编译和运行问题都改好了,逻辑问题自己看一下吧:
具体的
看下面程序里注释/////////////////////////////////////////的部分:

#include<stdio.h>
void main()

double average[3];
int totalmark[3];
int mark[3][4];
int i,j,max,min;
printf("请输入每个选手的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&mark[i][j]);
for(i=0;i<3;i++)

min=mark[i][0];
max=mark[i][0];
for(j=0;j<4;j++)
////////////////////////////////////
if(mark[i][j]<min)
min=mark[i][j];
if(mark[i][j]>max)
max=mark[i][j];
///////////////////////////////////


for(i=0;i<3;i++)

totalmark[i]=0;
for(j=0;j<4;j++)
////////////////////////////////////
totalmark[i]+=mark[i][j];
average[i]=(totalmark[i]-max-min)/2;
///////////////////////////////////


printf("%5s%5s%5s%5s%5s%5s\n","NO","1","2","3","4","aver");///////////////////////////////////
for(i=0;i<3;i++)

printf("选手%d",i+1);
for(j=0;j<2;j++)
printf("%5d",mark[i][j]);
printf("%5d\n",average[i]);



追问

谢谢,能编译出来,可是为什么结果是这样啊?

追答

这一次完全OK了,加些分吧:)

#include
void main()

double average[3];
int totalmark[3];
int mark[3][4];
int i,j,max[3],min[3];
printf("请输入每个选手的成绩:\n");
for(i=0;imax[i])
max[i]=mark[i][j];
///////////////////////////////////


for(i=0;i<3;i++)

totalmark[i]=0;
for(j=0;j<4;j++)
////////////////////////////////////
totalmark[i]+=mark[i][j];
///////////////////////////////////
average[i]=(double)(totalmark[i]-max[i]-min[i])/2.0;///////////////////////////////////


printf("%5s%5s%5s%5s%5s%8s\n","NO","1","2","3","4","aver");///////////////////////////////////
for(i=0;i<3;i++)

printf("选手%d",i+1);
for(j=0;j<4;j++)///////////////////////////////////
printf("%5d",mark[i][j]);
printf("%8.2f\n",average[i]);///////////////////////////////////

追问

嗯,蛮不错的!还想问一下,max与min变量为什么要定义成数组形式啊??不定义成数组运行结果也是一样的!!请问你的想法是怎样的??……能加你的QQ吗?想拜师学艺!

追答

定义成数组形式只是为了逻辑更清晰,每个人对应自己的最高分和最低分记录,不会搞混

追问

还想问你一道题,很重要,我写的程序很多错误,改了很久。希望你加我的QQ1729270984!! 谢谢!!谢谢!!!!

追答

我在公司,没有QQ,还是起帖吧,这里高人多,肯定能解决的

本回答被提问者采纳
参考技术B 改为
#include<stdio.h>
void main()

double average[3];
int totalmark[3];
int mark[3][4];
int i,j,max,min;
printf("请输入每个选手的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&mark[i][j]);
for(i=0;i<3;i++)

min=mark[i][0];
max=mark[i][0];
for(j=0;j<4;j++)
if(mark[i][j]<min)
min=mark[i][j];
if(mark[i][j]>max)
max=mark[i][j];


for(i=0;i<3;i++)

totalmark[i]=0;
for(j=0;j<4;j++)
totalmark[i]+=mark[i][j];
average[i]=(totalmark[i]-max-min)/2;



//printf("%5s%5s%5s%5s%5s%d","NO",1,2,3,4,"aver");//你原来的,输出控制符有误
printf("%5s%5d%5d%5d%5d%s","NO",1,2,3,4,"aver");

for(i=0;i<3;i++)

printf("选手%d",i+1);
for(j=0;j<3;j++)
printf("%5d",mark[i][j]);
printf("%5d\n",average[i]);





你再看一下平均值
参考技术C 有错的地方给你改了,你再试试吧

for(i=0;i<3;i++)

min=mark[i][0];
max=mark[i][0];
totalmark[i]=0;
for(j=0;j<4;j++)

if(mark[i][j]<min)
min=mark[i][j];
if(mark[i][j]>max)
max=mark[i][j];
totalmark[i]+=mark[i][j];

average[i]=(totalmark[i]-max-min)/2.0;


printf("%5s%5d%5d%5d%5d%6s\n","NO",1,2,3,4,"aver");
for(i=0;i<3;i++)

printf("选手%d",i+1);
for(j=0;j<4;j++)
printf("%5d",mark[i][j]);
printf("%10lf\n",average[i]);
参考技术D #include<stdio.h>
void main()

double average[3];
int totalmark[3];
int mark[3][4];
int i,j,max[3],min[3];
printf("请输入每个选手的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&mark[i][j]);
for(i=0;i<3;i++)

min[i]=mark[i][0];
max[i]=mark[i][0];
for(j=0;j<4;j++)
if(mark[i][j]<min[i])
min[i]=mark[i][j];
if(mark[i][j]>max[i])
max[i]=mark[i][j];



for(i=0;i<3;i++)

totalmark[i]=0;
average[i]=0;
for(j=0;j<4;j++)
totalmark[i]+=mark[i][j];

average[i]=(totalmark[i]-max[i]-min[i])/2;



printf("\nNO\t1\t2\t3\t4\taver\n\n");
for(i=0;i<3;i++)

printf("选手%d\t",i+1);
for(j=0;j<4;j++)
printf("%d\t",mark[i][j]);
printf("%5.0f\n",average[i]);



在 Visual Studio 2010 中调试时出现致命错误 HRESULT=0x80131c08

【中文标题】在 Visual Studio 2010 中调试时出现致命错误 HRESULT=0x80131c08【英文标题】:Fatal Error HRESULT=0x80131c08 while debugging in Visual Studio 2010 【发布时间】:2012-04-05 11:37:14 【问题描述】:

我在 VMware 4.1.1 的 Windows 7 Professional 64 位中运行 Visual Studio 2010,在 2 个处理器和大约 2GB 内存上运行。在调试一个简单的应用程序时,Visual Studio 似乎挂起/无响应。然后我收到一条气泡消息,通知我“Visual Studio 正忙于等待内部操作完成”。几分钟后,我收到以下提示:

“发生致命错误,需要终止调试。有关详细信息,请参阅 Microsoft 帮助和支持网站。HRESULT=0x80131c08。ErrorCode=0x0。”

Microsoft 的支持网站找不到解决方案。我搜索了我最喜欢的资源“谷歌”,但无济于事。以及在这里查看堆栈溢出。我确实在这里找到了一个与 VMware 类似但无关的帖子,帖子提到这个错误是由于内存问题造成的,所以我将虚拟机增加到 4GB 并再次尝试了整个过程。并得到了同样的错误。

有没有其他人遇到过这个问题,或者找到了解决方案,或者可以为我指明正确的方向。正如我所说,我确实搜索无济于事。

【问题讨论】:

异常代码的意思是“调试器超时”,这不足为奇。从来没有见过这个,你的设置有些混乱。更改设置。 感谢您的回复...vs setup 或 vmware setup? 机器设置。所以是的,可能是 vmware。 所以尝试在VMware中调整各种设置,仍然有同样的问题。今晚我将尝试一个不同的项目,看看它是否仍然存在,如果是,我将尝试设置一个新的虚拟机。上面忘了提到我在 Visual Studio 变得无响应时收到“延迟通知”,将在上面添加解释。 我在本机运行 Windows 8 且没有任何虚拟化的计算机上遇到了同样的错误。计算机是新安装的,并且只有在退出程序时才会出现错误。 【参考方案1】:

这与我的配置 VMware / 内存无关。我很尴尬地说这完全是我的错。我的代码中出现了数组问题,尽管我以前从未使用自己的代码导致 Visual Studio 崩溃。很抱歉浪费您的时间@Hans Passant。

【讨论】:

到底是什么问题?我遇到了同样的问题,但我的代码没有发现任何明显的问题。 我有时也会在退出应用程序时收到此错误,所以我很想听听有关此问题的更多信息 - 您是否损坏了堆或数组有什么问题? 老实说,我不记得我的代码的确切问题,因为我最后只是简化了它。但是,我可以告诉您,我试图将多个地址行分组到一个字符串数组中,并将其设置为单个属性中的串联字符串。最终将其分成多个地址属性。 这听起来和我遇到的问题一模一样。我正在编写代码以将类的 23 个属性打印到 CSV 文件中。如果有人有任何建议,将不胜感激。 不是浪费——这 8 年后,我找到了用旧代码更新数组的确切错误代码。如果不是因为你的帖子,我还会继续寻找。【参考方案2】:

当我使用 EnvDTE 命名空间自动附加到 C# 代码中的进程时出现此错误。附加的进程意外结束(进程以某种方式被杀死?),因此调试器超时。可能是一个不幸的时刻,在那条带有 HRESULT=0x80131c08 错误的消息之后,我还收到另一条消息说:由于不可恢复的 API 故障,无法从进程 X(自动附加的进程)中分离。 希望这可能会有所帮助,所以有一天会有所帮助。

【讨论】:

【参考方案3】:

在附加 VisualStudio 2013 调试器的同时将 WinDbg(非侵入性)附加到进程时,我遇到了此错误(以及其他错误)。如果你问我为什么要做这样的事情,那是因为 VS 2013 不再支持将 SOS 加载到 VS 调试器中!

【讨论】:

以上是关于一道c语言题,编译无错误,调试时出现“0x00403c2c 指令引用的 0x00000001 内存”,该内存不能为read。的主要内容,如果未能解决你的问题,请参考以下文章

keil5中编写代码时出现语法错误为什么无显示

C语言学习-基础

为啥编译时出现cannot find lz错误,怎么解决

codeblocks调试时出现不支持16位应用程序的提示,但编译时没有出现错误?

SpringBoot 编译运行时出现 错误: 无 效的目标发行版:1.11 的解决方法

在 Visual Studio 2010 中调试时出现致命错误 HRESULT=0x80131c08