Мне было интересно, что происходит с памятью, когда вы перераспределяете -1 ваш массив.Исходя из всего, что я прочитал о realloc, я предполагаю, что указатель по-прежнему указывает на то же место в памяти (функция не нуждается в поиске другого блока памяти, поскольку этот доступен и достаточно), скажите мне, если я ошибаюсь.У меня такой вопрос: удаленный фрагмент массива удален (как при использовании free ()), или значения остаются без изменений, а часть памяти используется совместно для будущих операций malloc, calloc и т. Д .?
EDIT: У меня еще один вопрос.Эта функция работает правильно?Следует удалить элемент массива, предварительно переписав его следующим элементом массива.Делая это по всему массиву, последний элемент такой же, как предыдущий, а последний удаляется.PicCounter - это количество картинок, уже загруженных в программу.Проверьте это:
int DeletePicture(struct Picture **tab, int *PicCounter)
{
int PicToDelete;
printf("Enter the number of pic to delete ");
scanf("%d", &PicToDelete);
for (int i = PicToDelete - 1; i < (*PicCounter) - 2; i++)
{
(*tab)[i] = (*tab)[i + 1];
}
struct Picture *temp;
temp = realloc(*tab, ((*PicCounter)-1) * sizeof(*temp));
if (temp != NULL)
{
*tab = temp;
//That doesn't delete the element, because in main I can still print it
//like e.g. tab[lastelement].
(*PicCounter)--;
printf("Picture has been deleted\n");
return 0;
}
else
{
printf("Memory reallocation error\n");
return 1;
}
}