malloc分割错误

时间:2014-08-03 02:55:19

标签: c segmentation-fault

我的程序中存在严重的分段错误问题。

代码:

bool load(const char* dictionary)
{
    // creating a trie data structure
    typedef struct trie
    {
        bool is_word;        
        struct trie* alphabets[27];
    }trie;
    trie* root = NULL;

    //opening the dictionary file
    FILE* infile = fopen(dictionary, "r");
    if (infile == NULL)
    {
        return false;
    }
    char s[45];
    int i = 0, n = sizeof(trie);
    bool start = true;
    trie* tmp = NULL;
    for (int c = fgetc(infile); c != EOF; c = fgetc(infile))
    {
        c = tolower(c);
        if (isalpha(c) || c == '\'')
        {   
            s[i] = c;
            i++;
            start = false;
        }
        else if (start == false)
        {
            for (int j = 0; j < strlen(s); j++)
            {
                int c_int = (int) (s[j] - 'a');
                if (tmp == NULL || root->alphabets[c_int] == NULL)
                {
                    root->alphabets[c_int] = malloc(n);
                    tmp = root->alphabets[c_int];
                }
                else if (tmp != NULL)
                {
                    tmp->alphabets[c_int] = malloc(n);
                    tmp = tmp->alphabets[c_int];
                }
                else if (root->alphabets[c_int] != NULL)
                {
                    tmp = root->alphabets[c_int];
                }
                if (j == strlen(s) - 1)
                {
                    tmp->is_word = true;
                }
            }
        }
    }
    return true;

root->alphabets[c_int] = malloc(n);是给出seg错误的行

1 个答案:

答案 0 :(得分:3)

您需要为root分配内存。

那是:

root = malloc(sizeof(trie));