I am having a serious problem of segmentation fault in my program.
Code:
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); is the line giving a seg fault
 
     
     
    