2013-05-22 21 views
5

Próbuję dynamicznie zwiększać rozmiar tablicy. Czy istnieje standardowa funkcja C lub C++, która dodaje dodatkową przestrzeń na końcu tablicy lub ją usuwa? Wiem, to trudne, ponieważ nie można mieć pewności, że na stercie jest wystarczająco dużo miejsca. Ale czy nie powinno to być zadaniem systemu operacyjnego?Dynamicznie zwiększaj/zmniejszaj rozmiar tablicy

+1

["void * realloc (void * ptr, size_t size);"] (http://www.cplusplus.com/reference/cstdlib/realloc/) Funkcja w C –

+2

Musisz zdecydować, w jakim języku programujesz. W C używałbyś 'realloc'. W C++ użyjesz 'std :: vector'. –

Odpowiedz

5

Funkcja szukasz jest realloc() w C, który jest również obecny w STL C++ jako std::realloc

chociaż jak pan wspomniał C++, można też pójść na standardowym kontenerze jak std::vector który hermetyzacji związane zarządzanie pamięcią.

+0

nie zmniejsza rozmiarów, czy **? ** –

+0

cóż, zmniejsza się, gdy wprowadzę mniejszy rozmiar niż poprzednio. Czy to nie jest możliwe? –

+1

@GrijeshChauhan Możesz określić nowy rozmiar niższy od starego rozmiaru tablicy. Standard C określa (7.20.3.4), że 'realloc()' 'zwalnia stary obiekt wskazywany przez ptr i zwraca wskaźnik do nowego obiektu, który ma rozmiar określony przez rozmiar "i że zawartość nowego obiektu jest same do min (oldSize, newSize). – JBL

0

Nie ma funkcji C jako takich. możesz przejść do kontenera C++. To ma tablice, listy itp ...

0

prawdopodobnie można to osiągnąć, pisząc własne opakowanie do zarządzania pamięcią w taki sposób, aby dołączyć/zwolnić porcje pamięci z przydzielonej tablicy.

0

Po wielu eksperymentach przeprowadzonych przez ludzi takich jak profesorowie i inżynierowie (którzy mają rzeczywistą pracę przez kilka lat), rozszerzając tablicę, rozszerz ją o 50%, chyba że posiadasz informacje wewnętrzne, które mówią ci coś innego. realloc() wykonuje również dla ciebie wszystkie ciężkie operacje podnoszenia () (wyjaśnione dalej). Z Internetu: -> Funkcja realloc() zmienia rozmiar bloku pamięci wskazywanego przez ptr na rozmiar bajtów. Zawartość pozostanie niezmieniona w zakresie od początku regionu do minimum starych i nowych rozmiarów. Jeśli nowy rozmiar jest większy niż stary rozmiar, dodana pamięć nie zostanie zainicjowana. Jeśli ptr ma wartość NULL, to wywołanie jest równoważne malloc (rozmiar), dla wszystkich wartości wielkości; jeśli rozmiar jest równy zero, a ptr nie ma wartości NULL, wywołanie jest równoważne swobodnemu (ptr). Jeśli ptr nie ma wartości NULL, musi zostać zwrócone przez wcześniejsze wywołanie metody malloc(), calloc() lub realloc(). Jeśli wskazany obszar został przeniesiony, wykonywane jest wolne (ptr).

Powiązane problemy