I am attempting to create a program to create a Markov chain but I am having pointer problems. When I run the Program I get a segmentation fault.
#include <stdio.h>
#include <cstring>
#include <cstdlib>
struct word;
struct nextword
{
    word* sourceword;
    word* next = 0;
};
int wordcount;
struct word
{
    char* wordstr;
    struct word* next = 0;
    nextword* followingword = 0;
    int nextwordcount = 0;
};
int main()
{
    word* firstword = 0;
    char * buffer = 0;
    long length;
    FILE * f = fopen ("alice.txt", "rb");
    if (f)
    {
        fseek (f, 0, SEEK_END);
        length = ftell (f);
        fseek (f, 0, SEEK_SET);
        buffer = (char *)malloc (length);
        if (buffer)
        {
            fread (buffer, 1, length, f);
        }
        fclose (f);
    }
    if (buffer)
    {
        char wordbuffer[500];
        int fileindex = 0;
        while(fileindex < length-1)
        {
            int wordindex = 0;
            while(buffer[fileindex] != ' ')
            {
                    wordbuffer[wordindex] = buffer[fileindex];
                    wordindex++;
                    fileindex++;
            }
            if(wordindex != 0)
                {
                    wordbuffer[wordindex] = '\0';
                    word* newword = (word*)malloc(sizeof(word));
                    char* newwordstr = (char*)malloc((strlen(wordbuffer)+1)*sizeof(char));
                    strcpy(newword->wordstr, newwordstr);
                    if(!firstword)
                {
                    firstword = newword;
                }
                    else
                {
                    word* testword = firstword;
                    while(!testword->next)
                        {
                            testword = (testword->next);
                        }
                    testword->next = newword;
                    printf(newword->wordstr);
                }
                }
            return 0;
        }
    }
    else
    {
            return 1;
    }
}
I attempted to remove the file reading part and replace it with a hard coded string, but the problem remained.
 
     
     
    