Błąd przy definiowaniu int tablica[zmienna]

0

Mam problem ze zdefiniowaniem tablicy o rozmiarze pobieranym z wejścia. W poprzednich programach ten sposób działał, jednak tutaj dla count > 2 (np. 4) program zwraca błąd Segmentation fault. Kod wygląda mniej więcej tak:

int count;
cin >> count;

int towerSize[count];

...a w orginale:

	int debug = 1;
	if(debug)cout<<"Start\n";
	
	if(debug)cout<<"Init count";
	int count;
	if(debug)cout<<" - \033[32mOK\033[0m\nGet count:\n > ";
	cin >> count;
	
	if(debug)cout<<" - \033[32mOK\033[0m count = "<<count<<"\nInit next vars: ";
	
	int towerSize[count];
	if(debug)cout<<"towerSize, ";
	int i, j;
	if(debug)cout<<"i, j, ";
	int tower[count][1000000];
	if(debug)cout<<"tower, ";
	int towerMax=0;
	if(debug)cout<<"towerMax; \033[32mOK\033[0m";

Przykłady działania:

arrviasto@MajesticUbuntu: ... $ ./wie.e
Start
Init count - OK
Get count:

2

  • OK count = 2
    Init next vars: towerSize, i, j, tower, towerMax; OK^C
    arrviasto@MajesticUbuntu: ... $ ./wie.e
    Start
    Init count - OK
    Get count:

3

  • OK count = 3
    Segmentation fault
    arrviasto@MajesticUbuntu: ... $ ./wie.e
    Start
    Init count - OK
    Get count:

4

  • OK count = 4
    Segmentation fault
0

Musisz skorzystać z dynamicznej alokacji czyli:

int count;
cin >> count;

int *towerSize = new int[count];

do takiej tablicy odwolujesz sie tak jak do normalnej czyli towrSize[0]=3;

Natomiast jeśli chodzi o tablice dwuwymiarowa:

int (*tab)[10000] = new int[count][10000];
mam nadzieje że się nie pomyliłem :D

0

Okazuje się, że to nie to było błędem, tylko naiwna wiara "że się uda" (trudno było zadeklarować tablicę zawierającą count*1000000 elementów). Teram mam inny problem.
Muszę wczytać coś takiego:

n
s1 x11 x12 ... x1s1
s2 x21 x22 ... x2s2
...
sn xn1 xn2 ... xnsn

czyli:
n wierszy zawierających jako pierwszą liczbę si ilość następnych liczb xij. Problem w tym, że 1 <= n <= 500000</i> i <i>1 <= j <= 1000`000

Jak widać ciężko to nawet opisać. Wszystko byłoby w porządku gdyby znane było największe s. Niestety nie ma takiej możliwości i nie wiem jak zmagazynować te dane... Powinny być w tablicy 2D, ale nie wiem czy się da.

// EDIT:

A jednak dynamicznie się udało. Dzięki!

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