鱼C论坛

 找回密码
 立即注册
查看: 3088|回复: 6

谭浩强 第四版 第六章 习题6 求解

[复制链接]
发表于 2012-6-19 20:52:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. void main()
  3. {
  4.    int a[10][10], i , j  ;
  5.       for (i = 1; i <= 10; i ++)
  6.         {
  7.            for ( j = 1;j <= i;j ++ )
  8.               {
  9.                 if (j == 1 || j == i)
  10.                  {
  11.                      a[i][j] = 1;
  12.                   }
  13.                 else
  14.                 {
  15.                 a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
  16.                 }
  17.               }
  18.         }
  19.         for (i = 1; i<=10; i ++)
  20.         {
  21.           for(j = 1; j <= i; j ++)
  22.             {
  23.              printf("%5d",a[i][j]);
  24.             }
  25.              printf("\n");
  26.         }
  27.                
  28. }
复制代码
为什么运行的时候回出现改内存不能为“read”。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-20 00:01:15 | 显示全部楼层
什么运行的时候回出现改内存不能为“read”。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-20 11:22:23 | 显示全部楼层
在进行的时候编译啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-20 12:17:48 | 显示全部楼层
天哪。。。LZ真是个天才。。。你的代码很牛X啊,我调试的时候,在末尾下断点,执行完以后,没有任何问题,但是函数一返回就出事了。。。最后细细观察发现,你的for循环里面i=1;i<=10;就说明 i最后等于10的时候,就出现a[10][10] 这样已经越界了,因为你的数组的最后一个元素是a[9][9] ,你给a[10][10]赋值的时候,覆盖了存储在栈空间的函数返回地址,按理a[9][9]存放在[ebp-4]的地方,a[9][10] 就是ebp,a[10][10] 是[ebp+4] ,而函数的返回地址正好放在[ebp+4]的地方,你给a[10][10] 赋值的时候覆盖了函数返回地址,然后导致返回出错。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-20 12:18:58 | 显示全部楼层
把 i<=10和j<=10换成  i<10和j<10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-20 22:03:00 | 显示全部楼层
对喔,呵呵,人笨起来,这种错误都难发现啊!真是万分感激啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-14 15:18:49 | 显示全部楼层

a[10][0] a[10][1] a[10][2]
a[10][10]在很远很远的地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表