ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Лекция 12. Управление данными в heap-памятиБиблиотечные функции распределения heap-памяти Библиотечные функции управления heap-памятью следующие (alloc.h, stdlib.h): malloc - выделение памяти размером size байт. Определение: char * malloc (unsigned size) calloc - выделение памяти размером nelem * elsize и очистка ее. Определение: char * calloc (unsigned nelem, unsigned elsize) realloc - изменение размера ранее выделенной памяти. Определение: char,* realloc (char * ptr, unsigned size) free – освобождение ранее выделенной памяти. Определение: void free (ptr) char * ptr; В том случае, если память под данные не выделена, - первые три функции возвращают значение NULL. Этот факт может быть использован в целях контроля работы программы. Пример double *ptr; if((ptr = (double *)calloc(100, sizeof(double))!= NULL) { Работа с массивом на 100 элементов типа double } else printf(“Память под массив не выделена.”\ “ Смените модель памяти и повторите компиляцию!\n”); …………………………………………………………… Размещение массивов в heap-памяти Массивы произвольной размерности и любым заданным числом элементов по каждому из измерений могут размещаться в heap-памяти. Необходимо только правильно сформировать запрос на выделение памяти (аргументы функций malloc или calloc) и в процессе работы с массивом организовать пересчет индексов в единственный индекс для вектора. Пример Работа с матрицей произвольного размера. …………. double *A; A=(double*)malloc(m x n x sizeof(double)); if (A==NULL) exit(0); /* в stdlib.h*/ …………….. test1 (A,m,n); Здесь размерность m на n считывается из входного потока. void test1(double *pt, int m, int n) { int i, j; ………….. for (i=0;i<m; i++) for (j=0; j<n; j++) printf(“%d, %d, %f\n”, i, j, *(pt + i*n + j)); } m – число элементов по первому измерению, нужно для цикла и контроля границ индекса. n - число элементов по второму измерению (участвует в пересчете индекса в указатель). Точно так же для 3-х измерений. Число элементов по 2-му и 3-му измерениям участвуют в пересчете индексов, а число элементов по 1-му – нет (Лекция 8). Не нашли, что искали? Воспользуйтесь поиском:
|