Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       mcheck, mcheck_check_all, mcheck_pedantic, mprobe - проверяет целостность кучи

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <mcheck.h>

       int mcheck(void (*abortfunc)(enum mcheck_status mstatus));
       int mcheck_pedantic(void (*abortfunc)(enum mcheck_status mstatus));
       void mcheck_check_all(void);

       enum mcheck_status mprobe(void *ptr);

ОПИСАНИЕ

       Функция  mcheck()  устанавливает  набор  отладочных ловушек (hooks) на семейство функций выделения памяти
       malloc(3).  Эти  ловушки  выполняют  определённые  проверки  целостности   состояния   кучи.   Проверками
       обнаруживаются  следующие  ошибки  приложения: многократное освобождение одного блока памяти, повреждение
       структур данных служебной информации, расположенных непосредственно перед блоком выделенной памяти.

       Для эффективной работы функция mcheck() должна вызываться перед первым  вызовом  malloc(3)  или  подобной
       функции.  В  случаях,  когда  это  трудно проверить, компоновка программы с параметром -lmcheck вставляет
       неявный вызов mcheck() (с аргументом NULL) перед первым вызовом функции выделения памяти.

       Функция mcheck_pedantic() похожа на mcheck(), но выполняет проверку всех выделенных  блоков  каждый  раз,
       когда вызывается функция выделения памяти. Она может работать очень медленно!

       Функция  mcheck_check_all()  выполняет немедленную проверку всех выделенных блоков. Этот вызов эффективно
       работает только, если перед этим была вызвана mcheck().

       Если система обнаруживает целостность кучи, то вызывается функция, которую указал вызывающий в  abortfunc
       с  единственным  аргументом  mstatus,  который  показывает,  какой тип рассогласованности обнаружен. Если
       abortfunc равно NULL, то функция по умолчанию печатает сообщение об ошибке в stderr и вызывает abort(3).

       Функция mprobe() выполняет проверку целостности блока выделенной памяти, на который указывает ptr.  Перед
       этим должна вызываться функция mcheck() (в противном случае mprobe() возвращает MCHECK_DISABLED).

       Далее  перечислены  значения,  возвращаемые  mprobe()  или  передаваемые  в  аргументе mstatus при вызове
       abortfunc:

       MCHECK_DISABLED (только mprobe())
              Не вызвана функция mcheck() до первого вызова функции выделения  памяти.  Проверка  несоответствий
              невозможна.

       MCHECK_OK (только mprobe())
              Никаких несоответствий не обнаружено.

       MCHECK_HEAD
              Память, предшествующая выделенному блоку, была затёрта.

       MCHECK_TAIL
              Память после выделенного блока была затёрта.

       MCHECK_FREE
              Блок памяти был освобожден дважды.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении mcheck()  и mcheck_pedantic() возвращают 0, а в случае ошибки возвращают -1.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌────────────────────────────────────────────────────────┬──────────────────────┬───────────────────────┐
       │ ИнтерфейсАтрибутЗначение              │
       ├────────────────────────────────────────────────────────┼──────────────────────┼───────────────────────┤
       │ mcheck(), mcheck_pedantic(), mcheck_check_all(),       │ Безвредность в нитях │ MT-Unsafe race:mcheck │
       │ mprobe()                                               │                      │ const:malloc_hooks    │
       └────────────────────────────────────────────────────────┴──────────────────────┴───────────────────────┘

СТАНДАРТЫ

       GNU.

ИСТОРИЯ

       mcheck_pedantic()
       mcheck_check_all()
              glibc 2.2.

       mcheck()
       mprobe()
              glibc 2.0.

ПРИМЕЧАНИЯ

       Компоновка программы с -lmcheck и использование переменной окружения MALLOC_CHECK_ (описана в mallopt(3))
       обнаруживают  ошибки  схожим  образом.  Но при использовании MALLOC_CHECK_ не требуется перекомпоновывать
       приложение.

ПРИМЕРЫ

       Программа, представленная ниже, вызывает mcheck() с аргументом NULL и затем освобождает  один  и  тот  же
       блок дважды. В следующем сеансе оболочки показано что случается при запуске программы:

           $ ./a.out
           About to free

           About to free a second time
           block freed twice
           Aborted (core dumped)

   Исходный код программы

       #include <mcheck.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(void)
       {
           char *p;

           if (mcheck(NULL) != 0) {
               fprintf(stderr, "mcheck() failed\n");

               exit(EXIT_FAILURE);
           }

           p = malloc(1000);

           fprintf(stderr, "About to free\n");
           free(p);
           fprintf(stderr, "\nAbout to free a second time\n");
           free(p);

           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ

       malloc(3), mallopt(3), mtrace(3)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства   разработал(и)   aereiae  <aereiae@gmail.com>,  Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>,
       Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>,  Max  Is  <ismax799@gmail.com>,
       Yuri   Kozlov   <yuray@komyakino.ru>,   Иван   Павлов  <pavia00@gmail.com>,  Малянов  Евгений  Викторович
       <maljanow@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                       mcheck(3)