2011-04-21 15 views
7

pracuję nad aplikacji były możliwe są trzy rozmiary dla danych umieszczonych:alokowanie Duży (5000+) Array

  • mały: 1000 Elementy
  • medium = 5000 Elementy
  • duże = 500 000 elementów

Problem polega na tym, że nie mogę przydzielić dużej tablicy. Wydaje się, że rozmiar większy niż 5000 nie jest akceptowany.

pojawia się błąd uruchomieniu czas, kiedy należy wykonać następujące czynności:

long size=1000; 
char ch; 
int arr[size]; 
ch=getch(); 

if(ch==..) 
    size=...; 

Rozmiary 1000 i 5000 wydają się działać dobrze, ale w jaki sposób mogę zrobić tablicę o rozmiarze 500K w ten sposób?

+0

Co dokładnie oznacza "nie można przydzielić"? Czy pojawia się błąd? Jaka jest wiadomość i skąd ją otrzymujesz? Zauważ, że 500000 elementów nie jest 500K. Prawdopodobnie jest to 2Meg, ponieważ C 'int's zwykle mają po 4 bajty. –

+0

Mam na myśli, że dostaję błąd czasu wykonywania, przez 500k mam na myśli 500 tysięcy element nie rozmiar –

+1

błąd runtime jest przepełnienie stosu –

Odpowiedz

8

Twój stos nie może pomieścić tak dużej ilości danych. Trzeba przeznaczyć dużych tablic na stercie następująco:

int *array = malloc (sizeof(int)*size); 

Jak PMG wskazał pamiętać, aby uwolnić swoją pamięć raz to zrobisz.

free(array); 
+0

język w pytaniu to c –

+1

lub jego ekwiwalent C 'int * array = malloc (sizeof (int) * size)' – cobbal

+0

yeah thanks for the heads up. Naprawiono to. – Pepe

3

Jest za duży na stos. Zamiast tego należy go przydzielić na stercie za pomocą funkcji malloc.

8

można przeznaczyć taką dużą tablicę na stercie:

int *arr; 
arr = malloc (sizeof(int) * 500000); 

Nie zapomnij sprawdzić, czy przydział succeded (jeśli nie - malloc zwraca NULL).

I jak wspomnieliśmy z pmg - ponieważ ta tablica nie znajduje się w stosie, musisz ją free zrobić po zakończeniu pracy z nią.

+0

Pamiętaj, aby zwolnić wskaźnik po zakończeniu pracy. – pmg

+0

@pmg - dzięki, pomyślałem o tym :) – MByD