Wpis z mikrobloga

Mirki mam dynamiczną tablicę struktur. Ta struktura to parę liczb i dynamiczna tablica dwuwymiarowa (struktura na obraz .pgm). Ta dynamiczna tablica struktur ma służyć jako ich baza. Nie umiem jednak zrobić usunięcia obrazu z bazy, które polegałoby na tym, że wybrany element z bazy jest usuwany a wszystkie po nim są tak jakby przesuwane w lewo.

Mój kod wygląda w ten sposób:
-zwalniam pamięć zaalokowaną dla tablicy dwuwymiarowej dla wybranego elementu
-przypisuję wartości kolejnych elementów. Czyli na przykład mam 5 elementów i chcę usunąć trzeci. To baza[2]=baza[3] itd
-realokuję pamięć dla tablicy struktur o liczbie elementów - 1

I nie działa. Pomocy język C
#programowanie
  • 5
@gzypol:

Alokujesz nową tablicę o 1 element mniejszą.
Kopiujesz elementy oprócz tego który chcesz usunąć
Zwalniasz tamtą tablicę
Zwalniasz tamten element (ale tylko tamten, bo reszta siedzi w nowej tablicy)
Albo robisz to tak, jak napisał @kebab-case, tylko za każdym razem obciążasz wtedy procesor alokacją, przepisywaniem i zwalnianiem pamięci, albo zamiast tablicy używasz listy: dodajesz do swojej struktury wskaźnik na następny element (możesz też dać na poprzedni, żeby była dwukierunkowa) i po usunięciu elementu musisz tylko wskaźniki dobrze doczepić. Zalety? Nic nie rusza się w pamięci (optymalniej), mniej operacji (optymalniej). Chyba, że masz tą tablicę narzuconą, to wtedy lipa ( ͡