構造体へのポインタの配列を持っています。要素を削除し、残りの部分をすべて空白にすることです。私は機能していると思われる機能を書いたが、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 [i]は)正しいかどうかを主にですが。私はそれを見て、それは配列の最後に移動し、後で別の場所に配置する空のスロットを残す必要があります。しかし、 'サイズ8の無効な読み取り/書き込み'のエラーは、私がapartmentArray [i]を解放すると実際にスロットをアクセス不能にするかどうか疑問に思っていました。なぜ私はそれに書き込むことができないと言うのですか?
ありがとうございます!
[mcve]を入力してください。コードはポインタの配列ではなく、 'ApartmentInfo'の配列を使用しているようです。 – Olaf