А.2.2. Проверка функции malloc()

А.2.2. Проверка функции malloc()

Функции выделения и освобождения памяти, имеющиеся в GNU-библиотеке языка С, способны обнаруживать факт записи в память до начала выделенной области, а также попытку освободить одну и ту же область дважды. Если задать переменную среды MALLOC_CHECK_ равной 2, программа malloc-use аварийно завершит работу в случае выявления такого рода ошибки. Подобное изменение поведения не требует перекомпиляции программы.

Вот что произойдет, если записать символ перед началом массива;

% export MALLOC_CHECK_=2

% ./malloc-use 12

Please enter a command: a 0 10

Please enter a command: w 0 -1

Please enter a command: d 0

Aborted (core dumped)

Команда export включила проверку функции malloc(), а значение 2 заставило программу завершиться сразу после обнаружения ошибки.

Проверка функции malloc() очень полезна, потому что программу не нужно перекомпилировать, однако возможности этой проверки весьма ограничены. В основном определяется, не были ли повреждены выделенные структуры данных. Таким образом, сразу же обнаруживаются попытки повторно удалить ту же самую область. Кроме того, выявляется факт записи данных непосредственно перед началом выделенного блока, поскольку его размер хранится именно там. К сожалению, проверка выполняется только тогда, когда программа вызывает функцию malloc() или free(), а не когда происходит обращение к памяти. То есть до обнаружения ошибки может произойти множество неправильных операций чтения и записи. В частности, в предыдущем примере ошибка записи была выявлена лишь при попытке освободить выделенную область.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

3.2.1. Библиотечные вызовы: malloc() , calloc() , realloc() , free()

Из книги автора

3.2.1. Библиотечные вызовы: malloc(), calloc(), realloc(), free() Динамическую память выделяют с помощью функций malloc() или calloc(). Эти функции возвращают указатели на выделенную память. Когда у вас есть блок памяти определенного первоначального размера, вы можете изменить его размер с помощью


15.5.2.5. Другие отладчики malloc

Из книги автора

15.5.2.5. Другие отладчики malloc Две статьи Cal Ericson в Linux Journal описывают mtrace и dmalloc, а также большинство других перечисленных ниже инструментов. Эти статьи Memory Leak Detection in Embedded Systems, выпуск 101[184], сентябрь 2002 г., и Memory Leak Detection in C++, выпуск 110[185], июнь 2003 г. Обе статьи доступны на веб-сайте


Проверка

Из книги автора

Проверка Установка цветов в соответствии с правилами может здорово помочь при проверке данных на этапе ввода. Например, аварийным красным будут выделяться значения, явно выходящие за рамки указанного диапазона, или подсвечиваться желтым «подозрительные» слова и цифры.


Проверка внедрения

Из книги автора

Проверка внедрения Проверка 1 Регулярная проверка высшим руководством выполнения работ по отслеживанию хода проекта и контролю над ним.Регулярные проверки проводятся высшим руководством для получения своевременной информации о производственном процессе и его


Проверка внедрения

Из книги автора

Проверка внедрения Проверка 1 Регулярная проверка высшим руководством выполнения работ по управлению субподрядом.Регулярные проверки проводятся высшим руководством для получения своевременной информации о процессе разработки ПО и его понимания на соответствующем


Проверка внедрения

Из книги автора

Проверка внедрения Проверка 1 Регулярная проверка высшим руководством работ по обеспечению качества.Регулярные проверки проводятся высшим руководством для получения своевременной информации о ходе процесса разработки ПО и его понимания на соответствующем уровне


Проверка внедрения

Из книги автора

Проверка внедрения Проверка 1. Регулярная проверка высшим руководством работ по управлению конфигурацией.Регулярные проверки проводятся высшим руководством для получения своевременной информации о процессе разработки ПО и его понимания на соответствующем уровне


Проверка

Из книги автора

Проверка      Так ли уж правильны наши рассуждения? Давайте проверим нашу функцию на учебной программе:/* проверка функции getint( )*/#define STOP - 1#define NONUM 1#define YESNUM 0main( ){int num, status;printf(" Программа прекращает считывание чисел, если встречает EOF. " );while((status = getint(&num)) != STOP)if(status = =


РАСПРЕДЕЛЕНИЕ ПАМЯТИ: malloc( ) И са11ос( )

Из книги автора

РАСПРЕДЕЛЕНИЕ ПАМЯТИ: malloc( ) И са11ос( )      Ваша программа должна предоставить достаточный объем памяти для запоминания используемых данных. Некоторые из этих ячеек памяти распределяются автоматически. Например, мы можем объявить char place[ ] = "Залив Свиной печенки";и будет


Проверка орфографии

Из книги автора

Проверка орфографии Люди во все времена ошибались, ошибаются и будут ошибаться. Даже грамотный человек, работая за компьютером, может, перепутав клавиши, набрать слово, приобретающее совершенно противоположный смысл. Это касается не только русского языка. В текстовом


17.3. Проверка строк

Из книги автора

17.3. Проверка строк Проверка строк является важным этапом при отслеживании ошибок. Значение этого этапа повышается, если проверяются вводимые пользователями данные либо выполняется сравнение переменных. Чтобы проверить строки, достаточно выбрать один из пяти


Проверка

Из книги автора

Проверка Инструкция проверки рассматривалась при обсуждении утверждений (лекция 11). Она говорит, что определенные утверждения должны удовлетворяться в определенных точках:checkassertion -- Одно или больше