Ich habe ein Array von Zeigern auf Strukturen, und was ich tun möchte, ist ein Element zu löschen und den Rest verschieben, um die Lücke zu füllen. Ich habe eine Funktion geschrieben, die zu funktionieren scheint, aber valgrind beschwert sich über 'ungültiges Lesen/Schreiben von Größe 8', also frage ich mich, ob das, was ich getan habe, falsch war.Löschen eines Elements aus einem Array von Zeigern auf Strukturen
Hier ist der Code:
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;
}
Meine Frage ist vor allem, ob der freie (apartmentArray [i]) korrekt ist. So wie ich es sehe, sollte es einen leeren Slot lassen, den ich einfach an das Ende des Arrays ziehe und später noch etwas anderes platziere. Aber der Fehler 'ungültiges Lesen/Schreiben von Größe 8' ließ mich darüber nachdenken, ob die Freigabe von apartmentArray [i] den Slot tatsächlich unzugänglich macht ..? Warum heißt es, ich kann nicht schreiben?
Danke!
Stellen Sie eine [mcve] bereit. Der Code scheint nicht ein Array von Pointer zu verwenden, sondern ein Array von 'ApartmentInfo'. – Olaf