Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
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)