Forum jest zablokowane. Podczas blokady nie można dodawać ani edytować wiadomości.
Temat: Tablice
Jakich tablic używać tak aby nie przekroczyć limitu pamięci? Używam tablicy dynamicznej i dla niektórych testów(pewnie dla dużych danych wejściowych) wyskakuje mi błąd "signal 9" i to pewnie przez tą tablicę. Jeśli użyję tablicy stałej to nie mogę jej przekazać zmiennej jako wielkości, a użycie #define z wartością maksymalną rzędu potęg 10 powoduje wywalenie programu ze względu na zbyt dużą tablicę...
Ja robię tak:
unsigned*A=new unsigned[n];
…
delete[]A;
unsigned*A=new unsigned[n];
…
delete[]A;
Jeśli zrobisz tak:
#define N 10000000
int main(int, char**)
{
...
int tab[N];
...
}
to program się na pewno wywali bo robiąc tablicę w ten sposób zostanie ona ulokowana na stosie, który ma ograniczenie najczęściej do 1MiB.
Możesz przed deklaracją dać static (static int tab[N];) to wtedy tablica de facto zostanie wkompilowana w kod maszynowy, i będzie to działało. To samo można uzyskać poprzez deklarowanie(definiowanie) globalnie.
I można również użyć alokacji dynamicznej, a potem pamięć zwolnić, w c++ poprzez operator new / delete, a w c malloc/free.
#define N 10000000
int main(int, char**)
{
...
int tab[N];
...
}
to program się na pewno wywali bo robiąc tablicę w ten sposób zostanie ona ulokowana na stosie, który ma ograniczenie najczęściej do 1MiB.
Możesz przed deklaracją dać static (static int tab[N];) to wtedy tablica de facto zostanie wkompilowana w kod maszynowy, i będzie to działało. To samo można uzyskać poprzez deklarowanie(definiowanie) globalnie.
I można również użyć alokacji dynamicznej, a potem pamięć zwolnić, w c++ poprzez operator new / delete, a w c malloc/free.
Stos ma ograniczenie do jednego Faceta w Czerni?! A ile to czarownic?
(żart)
(żart)