Тема: Проблема з викликом функції realloc
Всім привіт!
Вирішив розібратися з динамічним розподілом пам'яті та написав простеньку програму. Задача її полягає в тому, щоб прибирати зайві пробіли між словами. Ось код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n=50, k=0;
    int i=0, j=0;
    FILE *output;
    FILE *input;
    char *ptr;
    char *str1;
    char *str2;
    output = fopen("output.txt","w");
    input = fopen("input.txt","r");
    str1 = (char*)malloc(n*sizeof(char));
    str2 = (char*)malloc(n*sizeof(char));
    while( fscanf(input, "%c", str1+i) != EOF)
    {
        if(*(str1+i) != ' ' )
        {
            *(str2+j) = *(str1+i);
            j++;
            k = 1;
        }
        else if(k == 1)
        {
            *(str2+j) = *(str1+i);
            j++;
            k = 0;
        }
        i++;
    }
    
    free(str1);
    str1 = NULL;
    if(*(str2+j-1) == ' ')
    {
        ptr = (char*) realloc(str2, (j-1) * sizeof(char));
        if(ptr != NULL)    /*Перевірка виділення нової пам'яті*/
            str2 = ptr;    /*Запис адреси нової області пам'яті в вихідний вказівник*/
    }
    else
    {  
        ptr = (char*) realloc(str2, j * sizeof(char));    
        if(ptr != NULL)    
            str2 = ptr;    
    }
    
    
   
    printf("%s", str2);
    fprintf(output, "%s", str2);
     
    
    fclose(input);
    fclose(output);
    getchar();
    return 0;
}    
     Але при спробі змінити розмір масиву функцією realloc в мене залишається незрозумілий "хвіст".
Якщо ж просто зменшити розмір пам'яті, яка виділяється, то  чомусь звільняється пам'ять не з кінця, а з середини, "хвіст" ж залишається:
Яка можлива проблема і які існують тонкощі використання динамічної пам'яті? Завчасно кажу спасибі!)