Chinaunix

标题: 用gdb怎样来跟踪数组越界??? [打印本页]

作者: huzou_cn    时间: 2010-06-03 20:24
标题: 用gdb怎样来跟踪数组越界???
用gdb怎样来跟踪数组越界???
作者: huzou_cn    时间: 2010-06-03 20:24

作者: 没本    时间: 2010-06-03 20:25
用valgrind
作者: rain_fish    时间: 2010-06-03 20:29
越界时不就崩溃了吗?
作者: 没本    时间: 2010-06-03 22:11
回复 4# rain_fish


    越界不是一定会崩溃的。
void foo(void)
{
        char a[10];
        int b = 0;
        a[11] = 'o';  //a[11]越界但不崩溃,但是b的值被破坏了。
}
作者: 单眼皮大姐    时间: 2010-06-04 00:39
期待中~
作者: rain_fish    时间: 2010-06-04 08:22
回复  rain_fish


    越界不是一定会崩溃的。
void foo(void)
{
        char a[10];
        in ...
没本 发表于 2010-06-03 22:11



    是的,期待中。。。
作者: linuxlixk    时间: 2010-06-04 09:27
只能你自己保证
作者: wmmy2008    时间: 2010-06-04 09:56
本帖最后由 wmmy2008 于 2010-06-04 09:58 编辑
回复  rain_fish


    越界不是一定会崩溃的。
void foo(void)
{
        char a[10];
        in ...
没本 发表于 2010-06-03 22:11


//经典的死循环就这样子产生了!!!
void foo(void)
{
        char a[10];
        char i;
        for(i = 0 ; i < 11 ; i++)
            *(a + i) = 0;
}
作者: star1983653    时间: 2010-06-04 10:31
回复  rain_fish


    越界不是一定会崩溃的。
void foo(void)
{
        char a[10];
        in ...
没本 发表于 2010-06-03 22:11



现在的编译器在分配数组的时候,聪明了很多。b未必会被填成0
作者: net_robber    时间: 2010-06-04 14:19
数组越界不是程序错误,是逻辑错误
作者: huzou_cn    时间: 2010-06-06 18:02
急!!!同志们请给以指导。。。
作者: huzou_cn    时间: 2010-06-06 18:02
越界 编译 和输出都是正常的。。。

就是输出的值不是期望值。。。
作者: koolcoy    时间: 2010-06-06 23:57
本帖最后由 koolcoy 于 2010-06-06 23:58 编辑

使用watch命令
watch数组最后一个元素后面的内存地址,具体命令我记不清了,看看帮助吧。一旦有代码读写了你watch的内存地址,程序就会被中断,然后你就知道到底是哪端代码在玩你了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2