Тема: Проблема з викликом функції 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 в мене залишається незрозумілий "хвіст".
Якщо ж просто зменшити розмір пам'яті, яка виділяється, то чомусь звільняється пам'ять не з кінця, а з середини, "хвіст" ж залишається:
Яка можлива проблема і які існують тонкощі використання динамічної пам'яті? Завчасно кажу спасибі!)