鱼C论坛

 找回密码
 立即注册
查看: 2283|回复: 3

求大神~感激不尽!

[复制链接]
发表于 2016-3-24 20:01:52 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 康小泡 于 2016-3-28 16:21 编辑
#include<stdio.h>
int main()
{
        int a[3][4]={{1,5,9,5},{-1,-9,-6,-15},{5,6}};
        int hang=0,lie=0,i,j,max;
        max=a[0][0];
        for(i=0;i<3;i++)
        {
                for(j=0;j<4;j++)
                {
                        if(a[i][j]>max)
                        {
                                max=a[i][j];
                                hang=i;
                                lie=j;
                        }
                }
        }
        printf("the max number is:%d\n",max);
        printf("hang is:%d\n",hang);
        printf("lie is:%d\n",lie);
} 
   这个求矩阵中的最大数和坐在行列数。但是一开始输出那里我写错了变成printf("the max number is:%d\n",a[i][j]); 编译后出现了 4 0 2 显然不对的后来我改成这个变成:9 0 2 显然就对了~~~~我的问题是一开始写错的时候怎么会出现4呢?矩阵当中都没有4啊?求大神解答。感激不尽!
       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-24 20:11:59 | 显示全部楼层
问题描述不清哦.有编译图片吗.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-24 20:45:18 | 显示全部楼层
本帖最后由 muyu0096 于 2016-3-24 21:33 编辑

突然想起我之前说的不对,更正如下:
for循环结束后,i的值是3,j的值是4
如果你打印的是a[ i][j],那么就是打印a[3][4],实际上已经数组越界了,有的编译器是不允许通过编译的,有的则可以,一般是指向a[2][3]之后的第五个int位(如果你机器中int是4位的话,那就是4*5=20位)。
这样理解:a[3][4],相当于a[2][3],a[3][0],a[3][1],a[3][2],a[3][3],a[3][4].....
这个位置指向的值是啥就不好说了,我的平台上,a[0][0]这是存在[ebp-38h]中的,a[2][3]的地址是ebp-0cH,那么,a[3][4]实际上指向ebp+8H,这个值应该是main函数的第一个参数的值,我的平台是1,。
实际上这就是传说中的溢出攻击获取数据,因为取得了函数栈(这里是main函数)外面的值。

评分

参与人数 1荣誉 +3 鱼币 +10 收起 理由
~风介~ + 3 + 10 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-3-25 16:14:01 | 显示全部楼层
muyu0096 发表于 2016-3-24 20:45
突然想起我之前说的不对,更正如下:
for循环结束后,i的值是3,j的值是4
如果你打印的是a[ i][j],那么 ...

嗯嗯嗯 懂了谢谢~~!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-26 22:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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