使用GDB进行调试时,分段错误消失

时间:2013-12-10 13:42:38

标签: c++ gdb segmentation-fault

运行此code: http://ideone.com/yU80Bd

时出现分段错误

问题是当我在GDB中运行它时,代码运行良好且非常好。为什么这在没有段错误的gdb中运行,而是在每个其他地方都运行了分段错误?

以下是我要解决的问题:http://www.codechef.com/DEC13/problems/CHODE

1 个答案:

答案 0 :(得分:3)

问题是您的输入包含的字符不在[a-Z]范围内。例如:!这导致向量在无效索引处被加入。

您可以使用valgrind检查运行程序的这些内容。

valgrind ./ideone < stdin
...
==2830== Invalid read of size 4
==2830==    at 0x40111A: main (ideone.cpp:53)
...
==2830== Invalid write of size 4
==2830==    at 0x401120: main (ideone.cpp:53)

问题在于以下几点:

    for(int i=0;i<cipherText.size();++i)
    {
        char c = tolower(cipherText[i]);
        ++(cipherF[c-97].frequency);
    }

c - 97可能低于0.

您可以查看,例如:

    for(int i=0;i<cipherText.size();++i)
    {
        char c = tolower(cipherText[i]);
        if (c < 'a' || c > 'z') continue;
        ++(cipherF[c-97].frequency);
    }