这个简单的C程序为什么会出错?
本帖最后由 Prentis 于 2015-4-30 17:33 编辑用3*4的数组寻找12个数的最大值,结果能显示,但是现实玩就报错,vc++6.0没有给出原因,visual studio 2013显示如下void main()
{
int m, max, i, j;
printf("please enter 12 numbers:\n");
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 3; j++)
{
scanf("%d", &m);
}
}
max = m;
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 3; j++)
{
if (m>max)
{
max = m;
}
}
}
printf("max=%d\n", max);
}
原因如下 code block试过没有检查出错,运行也是对的。 菜鸟路过,望指教
对于数组譬如
int a【10】;
访问时是这样的
for(int i = 0; i < 10; i++)
......
你的问题是在i < 10 时,写成了 i <= 10了,这是很容易犯的错误,下次小心点就可以了。
还有就是求最大时,当是int等基本类型时,这种写法还可以接受,但如果是比较复杂的类型时,这种写法将会很消耗,个人建议是每次记住下标,最后一次直接用下标找到该数组中的值,赋给最大就可以了。 本帖最后由 myqicq 于 2015-5-1 01:05 编辑
void main()
{
int m, max, i, j;
printf("please enter 12 numbers:\n"); //2*3是6个
for (i = 0; i <= 2; i++) //这里<=2,会产生数组越界
{
for (j = 0; j <= 3; j++) //这里<=3,会产生数组越界
{
scanf("%d", &m);
}
}
max = m;
for (i = 0; i <= 2; i++) //这里<=2,会产生数组越界
{
for (j = 0; j <= 3; j++) //这里<=3,会产生数组越界
{
if (m>max)
{
max = m;
}
}
}
printf("max=%d\n", max);
}
改正的代码
void main()
{
int m, max, i, j;
printf("please enter 6 numbers:\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &m);
}
}
max = m;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
if (m>max)
{
max = m;
}
}
}
printf("max=%d\n", max);
system("pause");
}[/ code] 你的数组已经越界了 数组越界int m 改为 int m 越界 ,要记得你的循环是从0开始计数的~ 零度非安全 发表于 2015-5-1 07:16
你的数组已经越界了
虽然我不太懂,数组的确越界了 桃花飞舞 发表于 2015-5-1 10:11
虽然我不太懂,数组的确越界了
是的,数组越界了 看看。 内存泄露,将m改为m就OK了。 答案已出。。。。 栈溢出,数组旁边的存储空间被损坏了。 越界了,................ 楼猪要打好基础哦 根基不稳的样子 int m 改成 m 楼上已经解决 只能说这个真的是新手,明显的越界啊 越界、、、楼上已经解决
页:
[1]