Си| Вызвано исключение по адресу: нарушение прав доступа при чтении по адресу

При прохождении строки str = realloc(str, (length + sizeof(int))); выводится ошибка: Вызвано исключение по адресу 0x77CE9632 (ntdll.dll) в ConsoleApplication14.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000014. Помогите, пожалуйста, не могу понять, в чем ошибка

Условие задачи: в качестве внутреннего представления последовательности слов использовать массив из 6 списков, в k-ом из которых хранятся k-буквенные слова, упорядоченные по алфавиту; Выводить сначала все различные однобуквенные слова с указанием для каждого из них порядкового номера его первого вхождений в исходную последовательность, затем аналогичным образом все различные двухбуквенные слова и т.д.

void AllocateWord(char* str) 
{
    int b = 0;
    char c;
    strcpy(str, "");
    c = getchar();

    while (c != ',' && c != '.')
    {
        length = length + 1;
        if (str != NULL) {
            str = realloc(str, (length + sizeof(int)));
            *(str + f) = c;
            *(str + f + 1) = '\0';
            f++;
        }
        c = getchar();
    }
    if (c == '.')
        finish = 1;
}.



#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//#include <string.h >
typedef struct SNode* SList; 
struct SNode {                
    char* s;                  
    SList next;
    int firstInput;                
};
int k = 0;
int finish = 0;  
int f = 0;
int length = 0;
//                  end;

// const - передавая строку в список мы обещаем не менять, ту что нам передают
void AddFront(SList* L, const char* str)
{
    int isDub = 0;
    SList check = L;
    while (check != NULL)
    {
        if (strcmp(str, check->s) == 0)
        {
            isDub = 1;
            break;
        }
        check = check->next;
    }
    if (isDub == 0)
    {
        SList p = malloc(sizeof(struct SNode)); 
        char* s = malloc(strlen(str) + 1);       
        strcpy(s, str);                        
        p->s = s;                          
        p->next = *L;                     
        *L = p;
        p->firstInput = k;
    }

}
void AllocateWord(char* str)
{
    int b = 0;
    char c;
    strcpy(str, "");
    c = getchar();

    while (c != ',' && c != '.')
    {
        length = length + 1;
        if (str != NULL) {
            str = realloc(str, (length + sizeof(int)));
            *(str + f) = c;
            *(str + f + 1) = '\0';
            f++;
        }
        c = getchar();
    }
    if (c == '.')
        finish = 1;
}
void Print(SList L)
{
    while (L != NULL) {
        printf("%d:%s ", L->firstInput, L->s);
        L = L->next;
    }
    printf("\n");
}

int main()
{
    printf("Input string:\n");  
    char** a = malloc(sizeof(char*) * 6);
    char* newString = NULL;
    for (int i = 0;i < 6;i++) 
    {
        SList y = malloc(sizeof(struct SNode));     
        y->s = "0";
        y->next = NULL;                      

    }
    while (finish != 1)
    {
        AllocateWord(&newString);
        k++;
        AddFront(&a[strlen(newString) - 1], "");
    }
    for (int i = 0; i < 6;i++)
    {
        Print(a[i]);
    }
}

Ответы (0 шт):