|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Удаление памяти в куче
По окончании работы с выделенным блоком памяти его следует освободить, чтобы функции malloc() или calloc() могли снова воспользоваться этой памятью. Если не освободить выделенную в куче память, которая больше не нужна, ее нельзя будет использовать до конца работы программы. Для освобождения выделенной в куче памяти следует использовать библиотечную функцию free(), которой следует передать указатель на освобождаемую память, например:
free (p);
Пример 1. Программа, в которой запрашивается размерность массива, память под массив распределяется динамически, в процессе исполнения программы. Ввод элементов массива в диалоговом режиме
#include <stdio.h> #include <conio.h> #include <alloc.h> // для функции malloc()
int main(void) { int n; //переменная, в которую будет введена размерность массива int i; //управляющая переменная цикла int *pa; //объявление указателя на данное целого типа clrscr();
puts ("Введите количество элементов массива"); scanf("%d",&n);
// динамическое распределение памяти под n элементов массива // инициализация указателя pa адресом, который возвращает функция malloc() pa=(int *)malloc(n*sizeof(int));
//ввод элементов массива в диалоговом режиме for(i=0; i<n; i++) { printf("\nВведите элемент массива с индексом %d ",i); scanf("%d",pa+i); //функция scanf получает адрес элем. массива }
printf("\n\n Массив выведен по 10 элементов в строке \n\n"); //вывод элементов массива for(i=0; i<n; i++) { printf("%6d ", *(pa+i)); // вывод массива if(i%10==9) printf("\n"); }
getch(); return 0; } Пример 2. Обьединение двух строк к концу строки s дописывается строка t, вычисляется длина полученной строки. Память под строки распределяется динамически
#include <alloc.h> #include <stdio.h> void main(void)
{ char *t,*s; //объявление указателей на данные типа char int i=0; // динамическое распределение памяти под строки s=(char *)malloc(160); t=(char *)malloc(80);
puts("Введите первую строку "); gets(s); puts("первая строка"); puts(s);
puts("Bведите вторую строку "); gets(t); puts("вторая строка"); puts(t);
// выполнять, пока не найден конец первой строки while(*s!='\0') { i++; s++; //сдвигаем указатель в конец первой строки }
// выполнять, пока не найден конец второй строки while(*t!='\0') { *s++=*t++; //дописываем символы второй строки к первой i++; }
*s='\0'; //дописываем нулевой байт к концу результирующей строки
printf("длина результирующей строки i=%d\n",i);
// сдвигаем указатель в начало результирующей строки while(--i>=0) {s--; } puts("результат:"); puts(s);
}
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |