Segmentation fault

0

Witam, mam problem z takim oto programem:

int main()
{
     unsigned int tab[10000001];
     int i = 0;
}

Kompiluje się on bez błędu, ale nie chce się wykonać - na Windowsie wykonanie przerywa się bez komentarza, na Linuxie mówi "segmentation fault (core dumped)". Co ciekawe, gdy nie próbuję przypisać zmiennej i wartości 0 (ale deklaruję tę zmienną), program wykonuje się bez błędu. Może mi ktoś powiedzieć, z czego wynika takie zachowanie i jak sobie z nim poradzić?

Używam Windows 7 + MinGW oraz Ubuntu 14.04 LTS + GCC, architektura 64bit

0

Jeśli chcesz taką tablice to zrób ją dynamicznie. Teoretycznie powinna działać.

 
int * tablica = new int[ 10000001 ];
//tu używasz normalnie tablice
delete [] tablica; // po zakończeniu zabawy usuwasz ją 
2

Dla sizeof(int) == 4 ta tablica zajmuje 40MB. Nic dziwnego, że nie mieści się na stosie, który z reguły ma ok 1-2MB i musi wystarczyć dla wszystkich funkcji w danym wątku.

Powinieneś użyć malloc do alokacji dynamicznej.

0

Z tego co mi się wydaje jest tez jakaś biblioteka pozwalająca takie liczby używać.

0

Biblioteka za dużo nie pomoże, musiałbyś zwiększyć rozmiar stosu (o ile dobrze pamiętam - przy kompilacji na Windowsie i przed uruchomieniem na Linuksie), tylko po co?

0

Chyba się pomyliłem. Nie mam teraz dostępu do kompa. Wiec znalazłem tylko to http://stackoverflow.com/questions/3771154/how-to-declare-and-use-huge-arrays-of-1-billion-integers-in-c i jednak chyba nie ma innej drogi:P

0

raz to ta liczba ktora podal zmiescilaby sie bez problemu w zmiennej
a druga rzecz to kompletnie nie chodzi o liczby (ich wielkosc)...

0

Można jeszcze tak:

int main()
  {
   static unsigned int tab[10000001];
   int i=0;
  }

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