У меня есть массив указателей на структуры, и я хочу удалить элемент и переместить все остальное, чтобы заполнить пробел. Я написал функцию, которая, похоже, работает, однако valgrind жалуется на «недопустимое чтение/запись размера 8», поэтому теперь мне интересно, было ли то, что я сделал, было неверным.Удаление элемента из массива указателей на структуры
Вот код:
for (int i = (numOfApartments-1); i >= 0; i--) {
if (apartmentIsIdentical(apartment, apartmentArray[i]->apartment)) {
apartmentDestroy(apartmentArray[i]->apartment);
free(apartmentArray[i]);
shiftApartments(apartmentArray, i, numOfApartments);
numOfApartments--;
return 1;
}
}
static void shiftApartments(ApartmentInfo* array, int startIndex, int endIndex) {
for (int i = startIndex; i < endIndex; i++) {
swapApartments(&array[i], &array[i + 1]);
}
}
static void swapApartments(ApartmentInfo* apartment1, ApartmentInfo* apartment2) {
ApartmentInfo temp = *apartment1;
*apartment1 = *apartment2;
*apartment2 = temp;
}
Мой вопрос заключается в основном ли ([я] apartmentArray) является правильным свободным. Как я вижу это, он должен оставить пустой слот, который я просто переместил в конец массива и поместил там что-то еще позже. Однако ошибка «неправильного чтения/записи размера 8» заставило меня задаться вопросом, освобождает ли квартирный массив [i] сделать доступный слот недоступным ..? Почему я говорю, что я не могу писать?
Спасибо!
Предоставить [mcve]. Код, похоже, не использует am массив указателей, а массив 'ApartmentInfo'. – Olaf