Книга: Основы программирования в 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 программа видит собственную карту распределения памяти, которая отличается от карты распределения памяти любой другой программы. Только операционная система знает, как организована физическая память и не только управляет ею в интересах пользовательских программ, но также защищает их друг от друга.

Оглавление книги


Генерация: 1.156. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз