АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Удаление памяти в куче

Читайте также:
  1. Infinite USB Memory – флешка с безлимитным объемом памяти 03.03.2010 16:00 Максим Мишенев
  2. V. Различие в отношении к прошлому опыту между образами памяти и образами воображения
  3. Атравматичное удаление зубов
  4. Биологическое удаление фосфора
  5. БЛУЖДАНИЯ БЕЗ ПАМЯТИ
  6. ВАЛИНОР: Тропы памяти
  7. Величина, обратная емкости памяти
  8. во Всероссийской Вахте Памяти
  9. ВОСКРЕШЕНИЕ В ПАМЯТИ
  10. Вставка строк, столбцов, ячеек и их удаление
  11. Выделение памяти для структур.
  12. Голографической памяти

 

По окончании работы с выделенным блоком памяти его следует освободить, чтобы функции 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);

 

}

 


1 | 2 | 3 | 4 | 5 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)