Prentis 发表于 2015-4-30 17:20:53

这个简单的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);
}
原因如下

kissingfire 发表于 2015-4-30 21:39:12

code block试过没有检查出错,运行也是对的。

qlw319 发表于 2015-5-1 00:00:24

菜鸟路过,望指教
对于数组譬如
int a【10】;
访问时是这样的
for(int i = 0; i < 10; i++)
......
你的问题是在i < 10 时,写成了 i <= 10了,这是很容易犯的错误,下次小心点就可以了。
还有就是求最大时,当是int等基本类型时,这种写法还可以接受,但如果是比较复杂的类型时,这种写法将会很消耗,个人建议是每次记住下标,最后一次直接用下标找到该数组中的值,赋给最大就可以了。

myqicq 发表于 2015-5-1 01:00:55

本帖最后由 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]

零度非安全 发表于 2015-5-1 07:16:18

你的数组已经越界了

迷雾少年 发表于 2015-5-1 07:21:34

数组越界int m 改为 int m

Mr.屎壳螂 发表于 2015-5-1 10:08:47

越界 ,要记得你的循环是从0开始计数的~

桃花飞舞 发表于 2015-5-1 10:11:11

零度非安全 发表于 2015-5-1 07:16
你的数组已经越界了

虽然我不太懂,数组的确越界了

零度非安全 发表于 2015-5-1 13:16:20

桃花飞舞 发表于 2015-5-1 10:11
虽然我不太懂,数组的确越界了

是的,数组越界了

沫丶尛希 发表于 2015-5-1 16:48:09

看看。

卧龙超俊 发表于 2015-5-1 18:52:00

内存泄露,将m改为m就OK了。

automation 发表于 2015-5-1 23:47:24

答案已出。。。。

柯天翔 发表于 2015-5-2 16:49:04

栈溢出,数组旁边的存储空间被损坏了。

隨鈊乄鎍慾 发表于 2015-5-2 17:38:30

越界了,................

hacker.jin 发表于 2015-5-2 19:57:07

楼猪要打好基础哦    根基不稳的样子

一条大菜狗 发表于 2015-5-3 21:35:08

int m 改成 m

ipry0816 发表于 2015-5-3 22:08:42

helehappy 发表于 2015-5-4 21:36:48

楼上已经解决

xiyuan860130 发表于 2015-5-5 17:16:42

只能说这个真的是新手,明显的越界啊

s1452583104 发表于 2015-5-6 14:06:09

越界、、、楼上已经解决
页: [1]
查看完整版本: 这个简单的C程序为什么会出错?