首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么快速揪出越界的代码

2013-07-01 
如何快速揪出越界的代码估计是下标越界了,可是有很多行有访问写入,如何知道是哪一行越界的啊求技巧,我用的

如何快速揪出越界的代码
估计是下标越界了,可是有很多行有访问写入,如何知道是哪一行越界的啊
求技巧,我用的是VS2010
[解决办法]
windows 访问违规对话框里头有两个地址, 那个地址就是,
看看, 抄写在小本上,
然后启动程序, 调试, 找那个地址窗口
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

[解决办法]

#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

[解决办法]
单步调试,跟到出现越界的地方就行了!
[解决办法]
下数据断点,看程序走到哪里touch到这个断点。
[解决办法]
先设断点确定好大概的范围。。再单步一步步看它跑到哪里出问题。。

热点排行