Как можно вернуть указатель в потоке назад на один символ?

Пытаюсь реализовать алгоритм LZW на С. У меня есть текстовый файл, который я читаю в цикле while:

    while ((currentCharCode = fgetc(inFile)) != EOF ){
    // формируем суффикс
    realloc (sufix.value, 2*sizeof(char));
    sufix.value[0] = currentCharCode;
    sufix.value[1] = '\0';
    sufix.code = currentCharCode;

    if (strlen(prefix.value) <= strlen (dictionary[freeCode-1]->value) && inDictionary==1) prefix.value = realloc(prefix.value, strlen(prefix.value) + 2);
    if (prefix.value == NULL) prefix.value = strcpy(prefix.value, sufix.value);
    // К нашему текущему префиксу добавляем суффикс Теперь слово у нас расширилось на один символ       
    else prefix.value = strcat (prefix.value, sufix.value);
     
            // Проверяем словарь
                for (int i = 0 ; i< freeCode; i++){
                // если мы найдем в словаре наш префикс, то коду префикса назначаем соответствующий код из словаря 
                    if (strcmp (prefix.value, dictionary[i]->value) == 0){
                    prefix.code = dictionary[i]->code;
                inDictionary = 1;
                // Выходим из цикла проверки, возвращаемся к основному циклу 
                
                    }
                    else {
                        inDictionary = 0;
                    }
                    if (inDictionary==0 && i ==freeCode-1){
               //Если выполнилось условие проверки, то это значит, что расширенного слова нет в нашем словаре, значит
            // выделяем память под слово с первым свободным кодом 
             dictionary [freeCode] = malloc (sizeof(Word));
             // выделяем память под значение нового слова в словаре
             dictionary [freeCode]-> value = malloc (strlen(prefix.value) + 1);
             // копируем новое слово в словарь
             dictionary[freeCode] -> value = strcpy (dictionary [freeCode]->value, prefix.value);
             // Назначаем ему код
             prefix.code = freeCode;

             dictionary[freeCode]->code = prefix.code;
             // Мы записали расширенное в словарь 

             // Выводим в выходной поток код слова, которое есть в словаре
            fprintf (outFile, "%d", prefix.code);
            
             // Теперь текущим словом должен стать суффикс расширенного слова

             strcpy (prefix.value, sufix.value);
             prefix.code = sufix.code;
             
             free (sufix.value);
             

             // и увеличиваю код свободного слова
             ++freeCode;
             inDictionary =1;
            }
            
            if (inDictionary == 1 && strcmp(prefix.value, dictionary[i]->value)==0){
                realloc (prefix.value, strlen(prefix.value+2));

                sufix.value = malloc (2*sizeof(char));
                sufix.value[0] = fgetc(inFile);
                int lastPosition = ftell(inFile)-1;
                sufix.value[1] = '\0';
                strcat(prefix.value, sufix.value);
                inDictionary =0;
                if (ftell (inFile) !=0 && ftell (inFile) !=-1) fseek(inFile, lastPosition, 0);

                
            }
        }
    }
     

. В программе мне надо добавить к строке prefix.value следующий символ, а затем вернуть указатель на 1 символ назад. Но из-за строки

   if (ftell (inFile) !=0 && ftell (inFile) !=-1) fseek(inFile, lastPosition, 0);

Происходит утечка памяти. Как правильно сместить указатель на назад?

Вот я комментирую строку

        if (ftell (inFile) !=0 && ftell (inFile) !=-1) fseek(inFile, lastPosition, 0);

Вывод программы

введите сюда описание изображения

Убираю комментарий

введите сюда описание изображения

Точно так же программа ведет себя при использовании fseek(inFile, -1, SEEK_CUR);


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