Си| Вызвано исключение по адресу: нарушение прав доступа при чтении по адресу
При прохождении строки 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]);
}
}