W programie w c++ potrzebuję dwóch tablic o rozmiarach 50 000. Niestety program już po uruchomieniu się wyłącza... Jak rozwiązać ten problem?
int a[500000]; int b[500000];
W programie w c++ potrzebuję dwóch tablic o rozmiarach 50 000. Niestety program już po uruchomieniu się wyłącza... Jak rozwiązać ten problem?
int a[500000]; int b[500000];
zdefiniowac ja dynamicznie za pomoca operatora new
A jak to się robi?
static int a[500000],b[500000];
A czy mógłbyś powiedzieć dlaczego ze statyczną zmienną to działa a ze zwykłą nie?
Statyczna tablica zajmuje mniej pamięci?
statyczna jest na stercie a nie na stosie
Wibowit napisał(a):
statyczna jest na stercie a nie na stosie
A Wikipedia uważa że na stercie są dynamiczne zmienne... Więc kto ma rację?
http://pl.wikipedia.org/wiki/Sterta_(informatyka)
maro1 napisał(a):
Wibowit napisał(a):
statyczna jest na stercie a nie na stosie
A Wikipedia uważa że na stercie są dynamiczne zmienne... Więc kto ma rację?
http://pl.wikipedia.org/wiki/Sterta_(informatyka)
Przecież napisałem wyżej w komentarzu. Statyczne dane są albo w data
albo w bss
. W data
są te, które zostały jawnie zainicjalizowane (czymś innym niż zera) w kodzie, te (niejawnie) inicjalizowane zerami są w bss
. To rozdzielnie wynika z tego, że jeżeli coś jest jawnie zainicjalizowane to ta wartość musi zostać zapisana w pliku obiektowym, a zer się nie zapisuje - dane z bss
są zerowane podczas uruchomienia programu.
AFAIK standard mówi tylko, że ma to wszystko "gdzieś" być wsadzone w taki sposób, aby było dostępne w odpowiednich zakresach - czy to w funkcji, czy jako globalna zmienna itd.
Jeśli to mają być tablice statyczne, to sposób zaprezentowany przez użytkownika _13th_Dragon wydaje się najlepszy. W przeciwnym wypadku użyj klasy std::vector
. Nie używaj gołego new
, to tylko okazja do popełnienia błędu.