Zniszczenie obiektu w pamięci przez tablice?

0

Witam.
Mam pytanie - wiem, że dla niektórych odpowiedź jest banalna ale tak czy inaczej proszę o pomoc...
Otóż...załóżmy, że w moim programie użyję C-Stringów.
Tworzę jakiś tam kod później tworzę tablice z 80 elementami typu char i wpisuję do niej jakiś tekst. Później dalej piszę sobie jakiś kod, kompiluję program ale jednak stwierdzam, że tego tekstu w owej tablicy miałby być więcej...co wtedy mam zrobić? Po prostu powiększyć ją zmieniając [80] na np. [180] i dopisać jakiś tekst? Czy wtedy narażę się na utratę jakiś danych?
Jeżeli nie tak, to czy dynamiczna alokacja tablicy jest rozwiązaniem?
Rozumiecie o co mi chodzi?;>

0

Jeżeli nie polegałeś w funkcji na tym sztywnie ustalonym rozmiarze to nic się nie zepsuje. Ale zdecydowanie lepiej jest użyć dynamicznej alokacji. Musisz tylko pamiętać, żeby później tę pamięć zwolnić.

0

Nie rozumiem tego: "Po prostu powiększyć ją zmieniając [80] na np. [180] i dopisać jakiś tekst?"
Gdzie chcesz zmienić ten rozmiar? Da się tylko przy deklaracji - żadnych danych nie stracisz, bo niby w jaki sposób?
Nie napisałeś o jaki język Ci chodzi, jak C++ to rozwiązaniem jest po prostu użycie typu string, a nie zabawa z c-stringami, które z definicji są błędogenne.
Dynamiczna alokacja pamięci też jest rozwiązaniem, nie zawsze najlepszym, ale zawsze jakimś.

//edit: a propos postu Rev: przy powiększaniu może nie polec(zakładając, że funkcja nie potrzebuje zabawy z tym dopisanym tekstem). Dodatkowo używanie w takich wypadkach magic numbers to proszenie się o kłopoty - wypadałoby do ustalania rozmiaru korzystać ze stałych.

0
Rev napisał(a)

Jeżeli nie polegałeś w funkcji na tym sztywnie ustalonym rozmiarze to nic się nie zepsuje. Ale zdecydowanie lepiej jest użyć dynamicznej alokacji. Musisz tylko pamiętać, żeby później tę pamięć zwolnić.

no wlaśnie! Sedno sprawy. Jak te pamięć zwolnić? Bo nie mogę tego znaleźć w Symfonii C++..

0

Operatory new i delete, dynamiczna alokacja pamięci - to są podstawy. Jeżeli ta tablica siedzi na stosie, a nie stercie to nie ma takiej możliwości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1