Russian Belarusian English German Japanese Ukrainian

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

Heapchecknode

CuBook05

Функция

Ищет и проверяет отдельный узел памяти.
 
Синтаксис

#include<alloc.h>
int heapchecknode(void *node);
 
Прототип

alloc.h
 
Описание

Если узел был освобожден и heapchecknode вызывается с указателем на освобожденный узел, то heapchecknode может вернуть значение _BADNODE, вместо предполагаемого _FREEENTRY. Это происходит потому, что соседние свободные блоки сливаются, и блок, указанный при вызове функции, больше не существует.
 
Возвращаемое значение

При ошибке возвращается значение < 0, при успешном завершение возвращается значение > 0.
Если нет памяти, то возвращается значение _HEAPEMPTY (1).
Если память запорчена, то возвращается _HEAPCORRUPT(-1).
Если узел не найден, то возвращается _BADNODE (-2).
Если узел освобожден, то возвращается _FREEENTRY (3).
Если узел, это используемый блок, то возвращается _USEDENTRY (4).
 
Переносимость

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

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

#define NUM_PTRS 10
#define NUM_BYTES 16

int main(void)
{
char *array[NUM_PTRS];
int i;
for(i=0; i<NUM_PTRS; i++)
array[i] = malloc(NUM_BYTES);
for(i=0; i<NUM_PTRS; i+=2)
free(array[i]);
for(i=0; i<NUM_PTRS; i++)
{
printf("Узел %2d",i);
switch(heapchecknode(array[i]))
{
case _HEAPEMPTY:
printf(" Нет памяти\n");
break;
case HEAPCORRUPT:
printf(" Память запорчена\n");
break;
case _BADNODE:
printf(" Неверный узел\n");
break;
case _FREEENTRY:
printf(" Свободный блок\n");
break;
case _USEDENTRY:
printf(" Занятый блок\n");
break;
default:
printf(" Неизвестное возвращаемое значение\n");
break;
}
}
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

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