Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Farheapwalk

CuBook05

Функция

Используется для перемещения по глобальному heap от узла к узлу.
 
Синтаксис

#include<alloc.h>
int farheapwalk(struct farheapinfo *hi);
 
Прототип

alloc.h
 
Описание

Функция farheapwalk подразумевает, что память не запорчена. Для проверки перед использованием farheapwalk, вызовите farheapcheck. При достижении последнего блока функция возвращает _HEAPOK. При следующем вызове farheapwalk, она вернет _HEAPEND. farheapwalk получает указатель на структуру типа heapinfo (определена в файле alloc.h). При первом вызове farheapwalk установите поле hi.ptr в 0. farheapwalk вернет вам в этом поле адрес первого блока в heap памяти. Поле hi.size содержит размер этого блока в байтах. hi.in_use - это флаг, который устанавливается, если этот блок используется в настоящий момент.
 
Возвращаемое значение

Если нет глобальной динамической области памяти, то возвращается значение _HEAPEMPTY(1). Если структура heapinfo содержит верные данные, то возвращается _HEAPOK(2). Если достигнут конец heap памяти, то возвращается _HEAPEND(5).
 
Переносимость

Функция farheapwalk уникальна для DOS. Функция не совместима с Windows.
 
Пример

#include<stdio.h>
#include<alloc.h>

#define NUM_PTRS 10
#define NUM_BYTES 16

int main(void)
{
struct farheapinfo hi;
char far *array[NUM_PTRS];
int i;
for(i=0; i<NUM_PTRS; i++)
array[i] = farmalloc(NUM_BYTES);
for(i=0; i<NUM_PTRS; i++2)
farfree(array[i]);
hi.ptr = NULL;
printf("Размер Статус\n");
printf(" ------ ------ \n");
while(farheapwalk(&hi) == _HEAROK)
if(hi.in_use)
printf("%7u используется\n", hi.size);
else
printf("%7u свободен\n", hi.size);
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий