Выделение большого массива (более 5000) - PullRequest
7 голосов
/ 21 апреля 2011

Я работаю над приложением, где есть три возможных размера введенных данных:

  • small: 1000 элементов
  • medium = 5000 элементов
  • large= 500 000 элементов

Проблема в том, что я не могу выделить большой массив.Кажется, что размер больше 5000 не принимается.

Я получаю ошибку времени выполнения, когда я делаю следующее:

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

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

Размеры 1000 и 5000, кажется, работают нормально, ноКак я могу сделать массив размером 500 КБ таким образом?

Ответы [ 3 ]

9 голосов
/ 21 апреля 2011

Вы можете выделить такой большой массив в куче:

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

Не забудьте проверить, что распределение выполнено успешно (если нет - malloc возвращает NULL).

И, как упоминалось в pmg, - поскольку этот массив не находится в стеке, вы должны free заполнить его, как только закончите с ним работать.

8 голосов
/ 21 апреля 2011

Ваш стек не может содержать столько данных. Вы должны распределить большие массивы в куче следующим образом:

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

Как указал pmg, не забудьте освободить память, как только закончите.

free(array);
3 голосов
/ 21 апреля 2011

Слишком большой для стека. Вместо этого вам нужно выделить его в куче с помощью malloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...