Книга: Основы программирования в Linux
Неправильное обращение к памяти
Неправильное обращение к памяти
Предположим, что вы хотите сделать что-то "плохое" с памятью. В упражнении 7.4 в программе memory4.c вы выделяете некоторую область памяти, а затем пытаетесь записать данные за пределами выделенной области.
Упражнение 7.4. Неправильное обращение к вашей памяти
#include <stdlib.h>
#define ONE_K (1024)
int main() {
char *some_memory;
char *scan_ptr;
some_memory = (char *)malloc(ONE_K);
if (some_memory == NULL) exit(EXIT_FAILURE);
scan_ptr = some_memory;
while (1) {
*scan_ptr = '';
scan_ptr++;
}
exit(EXIT_SUCCESS);
}
Вывод прост:
$ ./memory4
Segmentation fault
Как это работает
Система управления памятью в ОС Linux защищает остальную систему от подобного некорректного использования памяти. Для того чтобы быть уверенной в том, что одна плохо ведущая себя программа (как эта) не сможет повредить любые другие программы, система Linux прекратила ее выполнение.
Каждая выполняющаяся в системе Linux программа видит собственную карту распределения памяти, которая отличается от карты распределения памяти любой другой программы. Только операционная система знает, как организована физическая память и не только управляет ею в интересах пользовательских программ, но также защищает их друг от друга.
- Часы в Windows показывают неправильное время
- 3.2.1.2. Начальное выделение памяти: malloc()
- Неисправности оперативной памяти
- Как работает модуль оперативной памяти
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти
- Характеристики модулей памяти
- ПО для диагностики оперативной памяти
- Поиск и устранение неисправностей модулей памяти
- «Хрустальная ваза» или бережное обращение с оптимизированным контентом
- 2.3.6. Задание объектов физической памяти
- Как узнать, какая у меня видеокарта, процессор и сколько памяти?