fanzhihao 发表于 2016-3-24 20:01:52

求大神~感激不尽!

本帖最后由 康小泡 于 2016-3-28 16:21 编辑

#include<stdio.h>
int main()
{
        int a={{1,5,9,5},{-1,-9,-6,-15},{5,6}};
        int hang=0,lie=0,i,j,max;
        max=a;
        for(i=0;i<3;i++)
        {
                for(j=0;j<4;j++)
                {
                        if(a>max)
                        {
                                max=a;
                                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); 编译后出现了 4 0 2 显然不对的后来我改成这个变成:9 0 2 显然就对了~~~~我的问题是一开始写错的时候怎么会出现4呢?矩阵当中都没有4啊?求大神解答。感激不尽!
       

atmo 发表于 2016-3-24 20:11:59

问题描述不清哦.有编译图片吗.

muyu0096 发表于 2016-3-24 20:45:18

本帖最后由 muyu0096 于 2016-3-24 21:33 编辑

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

fanzhihao 发表于 2016-3-25 16:14:01

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

嗯嗯嗯 懂了谢谢~~!!!!
页: [1]
查看完整版本: 求大神~感激不尽!