Не получается создать массив в 100 000 элементов - C (СИ)
Формулировка задачи:
Всем доброго времени суток. Столкнулся с проблемой: не получается создать массив в 100 000 элементов. Компилируется нормально, но вот при запуске программы, она аварийно завершается. Среда разработки Dev-C++.
Опытным путём установил, что можно максимально сделать 52070 элементов
#include <stdio.h>
#include <stdlib.h>
main(){
struct tzap{
unsigned long int sn,ph;
char fio[30];
};
tzap zap[100000]={};
long int i,pok;
int j,dlin,l;
char s[30]={};
for (i=1;i<=100000;++i){
zap[i].sn=i;
pok=1000000;
zap[i].ph=(rand()%9+1)*pok;
for (l=1;l<=6;++l){
pok=pok/10;
dlin=rand()%10*pok;
zap[i].ph+=dlin;
}
dlin=rand() % 11+20;
for (l=0; l<dlin; ++l)
zap[i].fio[l]=rand() % 26 + 97;
printf("%s%d%c","pozition l: ",l,' ');
printf("%d%c%d%c%s%c",zap[i].sn,' ',zap[i].ph,' ',zap[i].fio,'\n');
}
getchar();
}Решение задачи: «Не получается создать массив в 100 000 элементов»
textual
Листинг программы
tzap * zap = (tzap*)malloc(100000 * sizeof(tzap));
Объяснение кода листинга программы
В данном коде:
- Переменная
zapтипаtzapобъявлена и инициализирована значением, полученным от функцииmalloc, которая выделяет память для массива. - В
mallocуказан размер памяти, которую нужно выделить, в данном случае 100000 * sizeof(tzap). - Результат работы
mallocприводится к типуtzapс помощью оператораcast. - Значение
zapзаписывается в переменнуюtzap * zap. - В данном случае переменная
zapявляется указателем на первый элемент массива. - Массив состоит из 100000 элементов типа
tzap.