Узнать какой максимальный размер массива может быть выделен - C (СИ)
Формулировка задачи:
Помогите написать код.
Написать программу, которая запрашивает у пользователя количество элементов массива N,
выделяет память для массива размера N типа double, сообщает об успехе и количестве выделенных байт или неудаче.
С помощью написанной программы исследовать, какой максимальный массив может быть выделен.
Сравнить результат с объемом памяти в компьютере и объемом свободной памяти.
Решение задачи: «Узнать какой максимальный размер массива может быть выделен»
textual
Листинг программы
#include <stdio.h>
void main () {
unsigned long int n;
double *a;
while (1) {
printf ("\nInput new N or 0 to exit:");
fflush (stdin); scanf ("%lu",&n);
if (n==0) break;
printf ("\nNumber %lu scanned...",n);
a = new double [n];
if (a==NULL) {
printf ("\nCan't allocate %.0lf bytes!",(double)n*sizeof(double));
}
else {
printf ("\nSucess, %.0lf bytes",(double)n*sizeof(double));
delete a;
}
}
getchar();
}
Объяснение кода листинга программы
Вот список действий, которые выполняет этот код:
- Подключает стандартную библиотеку файлов C.
- Объявляет переменные:
n- типunsigned long int, используется для хранения количества элементов в массиве.a- указатель на типdouble, используется для хранения адреса первого элемента массива.
- Запускает бесконечный цикл, который прерывается только если пользователь вводит 0.
- В каждой итерации цикла выводит приглашение для ввода количества элементов и считывает его.
- Если количество элементов равно 0, цикл прерывается.
- Выводит сообщение о том, что количество элементов было успешно считано.
- Выделяет массив типа
doubleс размеромn. - Проверяет, удалось ли выделить память. Если нет, выводит сообщение об ошибке.
- Если память была успешно выделена, выводит сообщение об успехе и освобождает память.
- После завершения цикла программа ожидает ввода символа.
Пожалуйста, обратите внимание, что этот код может работать некорректно, если размер массива
nпревысит максимальный размер кучи.