未确定的SIGABRT

时间:2016-01-30 04:57:57

标签: c++

我在这里不知所措。我是C / C ++的新手,从Java迁移,所以我对C中内存的来龙去脉不太了解,我认为这是问题所在。

以下是自定义字符串的类,以及一组确定所述字符串字符的方法。

//Constructor
MyString::MyString(const char* input) {
    m_c = new char[strlen(input + 1)];
    strcpy(m_c, input);
}

bool MyString::IsAnagram(char* in) {
    int* a = BuildFreqTable(m_c);
    int* b = BuildFreqTable(in);
    if (strlen(m_c) != strlen(in))
        return false;
    for (int i = 0; i<256; i++)
    {
        if (a[i] != b[i])
            return false;
    }
    return true;

int* MyString::BuildFreqTable(const char* s) {
    int* table = new int[256];
    for (int i = 0; i < 256; i++)
        table[i] = 0;
    while (*s)
    {
        table[(unsigned char)*s]++;
        s++;
    }
    return table;
}

主要是我打电话给以下人员:

            int strtptr = 0;
            getline(cin, cmd);
            MyString tmp = cmd.c_str();
            char* buf = new char[tmp.Length()];
            buf[0] = '\0';

            do
            {

                int endptr = tmp.IndexOf(",", strtptr);
                 if (endptr == -1) {
                    endptr = tmp.Length();
                    char* temp = (tmp.Substring(strtptr, endptr - strtptr).GetString());

                    if (data.IsAnagram(temp))
                        strcat(buf, temp);
                    break;
                }
                else {
                    char* temp = (tmp.Substring(strtptr, endptr - strtptr).GetString());
                    if (data.IsAnagram(temp)) {
                        strcat(buf, temp);
                        strcat(buf, ",");
                    }
                    strtptr = endptr;
                    strtptr++;
                }
            } while (true);
            cout << buf;
        }

这适用于单个输入字符串,但是当有一些字符串(不确定字符数或字符串分隔符)时,会出现SIGABRT。代码是:

0x00007ffff7531cc9 in __GI_raise (sig=sig@entry=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.

我真的很茫然。

0 个答案:

没有答案