[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/segmentation-fault":3,"mdc-tkicle-key":610,"mdc-mi47l1-key":621,"mdc-hi5qw8-key":629,"mdc-m7hr03-key":637,"mdc--7m8kdn-key":645,"mdc-gdg231-key":669,"mdc--4d93k0-key":686,"mdc--lky588-key":703,"mdc--4wia6g-key":711,"mdc-614ivl-key":719,"related-/errors/linux/bus-error,/guides/linux/gdb-tutorial,/errors/linux/stack-overflow":727},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":535,"code":536,"createdAt":537,"description":538,"difficulty":539,"draft":540,"estimatedTime":541,"extension":542,"faq":543,"howToSteps":556,"howToTotalTime":575,"image":535,"keywords":576,"locale":587,"meta":588,"navigation":589,"path":590,"platform":591,"related":592,"section":596,"seo":597,"severity":598,"stem":599,"summary":600,"tags":601,"twitterCreator":535,"twitterSite":535,"type":608,"updatedAt":537,"__hash__":609},"content_ru/errors/linux/segmentation-fault.md","Segmentation Fault в Linux: причины и способы исправления",[7,8,9],"Все дистрибутивы Linux","Приложения на C/C++/Rust/Go","Ядро Linux 4.x и выше","FixPedia Team",{"type":12,"value":13,"toc":524},"minimark",[14,19,23,27,93,97,104,155,165,169,172,211,215,218,274,278,281,328,331,348,352,355,448,452,455,472,475,479,482,520],[15,16,18],"h2",{"id":17},"что-означает-ошибка-sigsegv","Что означает ошибка SIGSEGV",[20,21,22],"p",{},"Segmentation fault (ошибка сегментации) — это сигнал SIGSEGV, который отправляется процессу, когда он пытается обратиться к запрещённому участку памяти. Например, доступ к памяти, которая не принадлежит процессу, или попытка записи в read-only память. В Linux это обычно приводит к немедленному завершению программы с сообщением \"Segmentation fault\" или \"Segmentation fault (core dumped)\", если сгенерирован core dump.",[15,24,26],{"id":25},"причины-возникновения","Причины возникновения",[28,29,30,38,44,55,61,75,81,87],"ol",{},[31,32,33,37],"li",{},[34,35,36],"strong",{},"Разыменование нулевого указателя",": Попытка чтения или записи по адресу NULL (0x0).",[31,39,40,43],{},[34,41,42],{},"Выход за границы массива",": Доступ к элементу массива за пределами выделенной памяти.",[31,45,46,49,50,54],{},[34,47,48],{},"Использование освобождённой памяти (use-after-free)",": Обращение к указателю после вызова ",[51,52,53],"code",{},"free()",".",[31,56,57,60],{},[34,58,59],{},"Переполнение стека (stack overflow)",": Рекурсия без условия выхода или слишком большие локальные массивы.",[31,62,63,66,67,70,71,74],{},[34,64,65],{},"Некорректные приведения типов",": Например, приведение ",[51,68,69],{},"int*"," к ",[51,72,73],{},"char*"," и последующий доступ.",[31,76,77,80],{},[34,78,79],{},"Повреждение кучи (heap corruption)",": Переполнение буфера в куче, повреждающее метаданные.",[31,82,83,86],{},[34,84,85],{},"Ошибки в многопоточном коде",": Гонки данных, неправильная синхронизация.",[31,88,89,92],{},[34,90,91],{},"Повреждённые библиотеки или драйверы",": Использование устаревших или битых shared libraries.",[15,94,96],{"id":95},"способ-1-анализ-core-dump-с-gdb","Способ 1: Анализ core dump с GDB",[20,98,99,100,103],{},"Core dump — это снимок памяти процесса на момент падения. Если он включён (обычно через ",[51,101,102],{},"ulimit -c unlimited","), вы можете проанализировать его с помощью GDB.",[28,105,106,117,145,152],{},[31,107,108,109,112,113,116],{},"Убедитесь, что core dump существует. Он обычно называется ",[51,110,111],{},"core"," или ",[51,114,115],{},"core.\u003Cpid>"," в текущей директории.",[31,118,119,120],{},"Запустите GDB с исполняемым файлом и core dump:\n",[121,122,127],"pre",{"className":123,"code":124,"language":125,"meta":126,"style":126},"language-bash shiki shiki-themes github-light github-dark","gdb /path/to/program core\n","bash","",[51,128,129],{"__ignoreMap":126},[130,131,134,138,142],"span",{"class":132,"line":133},"line",1,[130,135,137],{"class":136},"sScJk","gdb",[130,139,141],{"class":140},"sZZnC"," /path/to/program",[130,143,144],{"class":140}," core\n",[31,146,147,148,151],{},"Внутри GDB используйте команду ",[51,149,150],{},"bt"," (backtrace) для получения стека вызовов. Это покажет, в какой строке кода произошла ошибка.",[31,153,154],{},"Ищите в выводе адрес, где произошёл segfault. Часто это будет функция из вашего кода или библиотеки.",[156,157,158],"blockquote",{},[20,159,160,161,164],{},"💡 Совет: Если core dump не генерируется, проверьте настройки ",[51,162,163],{},"ulimit -c"," и место на диске.",[15,166,168],{"id":167},"способ-2-запуск-под-valgrind","Способ 2: Запуск под valgrind",[20,170,171],{},"Valgrind — инструмент для обнаружения ошибок работы с памятью, включая segmentation fault.",[28,173,174,181,205,208],{},[31,175,176,177,180],{},"Установите valgrind, если ещё не установлен: ",[51,178,179],{},"sudo apt install valgrind"," (для Ubuntu/Debian).",[31,182,183,184],{},"Запустите программу через valgrind:\n",[121,185,187],{"className":123,"code":186,"language":125,"meta":126,"style":126},"valgrind --leak-check=full ./your_program [аргументы]\n",[51,188,189],{"__ignoreMap":126},[130,190,191,194,198,201],{"class":132,"line":133},[130,192,193],{"class":136},"valgrind",[130,195,197],{"class":196},"sj4cs"," --leak-check=full",[130,199,200],{"class":140}," ./your_program",[130,202,204],{"class":203},"sVt8B"," [аргументы]\n",[31,206,207],{},"Valgrind будет выводить подробные сообщения об ошибках, включая неинициализированные переменные, доступ к освобождённой памяти и т.д.",[31,209,210],{},"Ищите строки с \"Invalid read\" или \"Invalid write\" — они указывают на потенциальные причины segfault.",[15,212,214],{"id":213},"способ-3-использование-addresssanitizer-asan","Способ 3: Использование AddressSanitizer (ASan)",[20,216,217],{},"AddressSanitizer — это санитайзер, встроенный в компиляторы GCC и Clang. Он обнаруживает ошибки памяти во время выполнения.",[28,219,220,253,268,271],{},[31,221,222,223,248,249,252],{},"Перекомпилируйте свою программу с флагами санитайзера:\n",[121,224,226],{"className":123,"code":225,"language":125,"meta":126,"style":126},"gcc -fsanitize=address -g -o program program.c\n",[51,227,228],{"__ignoreMap":126},[130,229,230,233,236,239,242,245],{"class":132,"line":133},[130,231,232],{"class":136},"gcc",[130,234,235],{"class":196}," -fsanitize=address",[130,237,238],{"class":196}," -g",[130,240,241],{"class":196}," -o",[130,243,244],{"class":140}," program",[130,246,247],{"class":140}," program.c\n","\nФлаг ",[51,250,251],{},"-g"," добавляет отладочную информацию.",[31,254,255,256],{},"Запустите программу:\n",[121,257,259],{"className":123,"code":258,"language":125,"meta":126,"style":126},"./program [аргументы]\n",[51,260,261],{"__ignoreMap":126},[130,262,263,266],{"class":132,"line":133},[130,264,265],{"class":136},"./program",[130,267,204],{"class":203},[31,269,270],{},"При segmentation fault ASan выведет детальный отчёт, включая стек вызовов и тип ошибки.",[31,272,273],{},"ASan также может обнаруживать утечки памяти.",[15,275,277],{"id":276},"способ-4-проверка-кода-на-распространённые-ошибки","Способ 4: Проверка кода на распространённые ошибки",[20,279,280],{},"Если у вас есть исходный код, проверьте его вручную или с помощью статических анализаторов.",[282,283,284,291,297,300,311],"ul",{},[31,285,286,287,290],{},"Убедитесь, что все указатели проверяются на ",[51,288,289],{},"NULL"," перед использованием.",[31,292,293,294,54],{},"Проверьте границы массивов: индексы должны быть в диапазоне ",[51,295,296],{},"[0, size-1]",[31,298,299],{},"Избегайте возврата указателей на локальные переменные из функций.",[31,301,302,303,306,307,310],{},"В C++ используйте умные указатели (",[51,304,305],{},"std::unique_ptr",", ",[51,308,309],{},"std::shared_ptr",") для автоматического управления памятью.",[31,312,313,314,317,318,306,321,317,324,327],{},"Для строк используйте безопасные функции (",[51,315,316],{},"strncpy"," вместо ",[51,319,320],{},"strcpy",[51,322,323],{},"snprintf",[51,325,326],{},"sprintf",").",[20,329,330],{},"Можно использовать статические анализаторы:",[282,332,333,342],{},[31,334,335,338,339],{},[51,336,337],{},"cppcheck"," для C/C++: ",[51,340,341],{},"cppcheck --enable=all program.c",[31,343,344,347],{},[51,345,346],{},"clang-tidy"," для современного C++.",[15,349,351],{"id":350},"способ-5-обновление-системных-библиотек-и-драйверов","Способ 5: Обновление системных библиотек и драйверов",[20,353,354],{},"Иногда segmentation fault возникает из-за битых или устаревших библиотек, особенно если программа использует сторонние модули.",[28,356,357,403,426,445],{},[31,358,359,360],{},"Обновите систему:\n",[121,361,363],{"className":123,"code":362,"language":125,"meta":126,"style":126},"sudo apt update && sudo apt upgrade   # Для Debian/Ubuntu\nsudo dnf update                       # Для Fedora\n",[51,364,365,390],{"__ignoreMap":126},[130,366,367,370,373,376,379,381,383,386],{"class":132,"line":133},[130,368,369],{"class":136},"sudo",[130,371,372],{"class":140}," apt",[130,374,375],{"class":140}," update",[130,377,378],{"class":203}," && ",[130,380,369],{"class":136},[130,382,372],{"class":140},[130,384,385],{"class":140}," upgrade",[130,387,389],{"class":388},"sJ8bj","   # Для Debian/Ubuntu\n",[130,391,393,395,398,400],{"class":132,"line":392},2,[130,394,369],{"class":136},[130,396,397],{"class":140}," dnf",[130,399,375],{"class":140},[130,401,402],{"class":388},"                       # Для Fedora\n",[31,404,405,406],{},"Переустановите проблемную библиотеку, если подозреваете её:\n",[121,407,409],{"className":123,"code":408,"language":125,"meta":126,"style":126},"sudo apt reinstall libexample        # Пример для Ubuntu\n",[51,410,411],{"__ignoreMap":126},[130,412,413,415,417,420,423],{"class":132,"line":133},[130,414,369],{"class":136},[130,416,372],{"class":140},[130,418,419],{"class":140}," reinstall",[130,421,422],{"class":140}," libexample",[130,424,425],{"class":388},"        # Пример для Ubuntu\n",[31,427,428,429,432,433],{},"Проверьте, не используете ли вы старые версии библиотек, совместимые с текущей системой. Используйте ",[51,430,431],{},"ldd"," для просмотра зависимостей:\n",[121,434,436],{"className":123,"code":435,"language":125,"meta":126,"style":126},"ldd /path/to/program\n",[51,437,438],{"__ignoreMap":126},[130,439,440,442],{"class":132,"line":133},[130,441,431],{"class":136},[130,443,444],{"class":140}," /path/to/program\n",[31,446,447],{},"Если проблема в драйвере (например, графическом), обновите драйверы через менеджер драйверов или с сайта производителя.",[15,449,451],{"id":450},"способ-6-изоляция-проблемы-с-минимальным-примером","Способ 6: Изоляция проблемы с минимальным примером",[20,453,454],{},"Если segmentation fault происходит в большой программе, попробуйте создать минимальный воспроизводящий пример.",[28,456,457,460,463,466,469],{},[31,458,459],{},"Упростите код до минимального варианта, который всё ещё вызывает ошибку.",[31,461,462],{},"Удаляйте части кода по одной, чтобы найти конкретный участок.",[31,464,465],{},"Используйте комментарии для исключения блоков.",[31,467,468],{},"Как только найдёте минимальный пример, станет проще диагностировать причину.",[31,470,471],{},"Если проблема в сторонней библиотеке, проверьте её документацию на известные баги.",[473,474],"in-article-ad",{},[15,476,478],{"id":477},"профилактика","Профилактика",[20,480,481],{},"Чтобы избежать segmentation fault в будущем:",[282,483,484,490,496,502,508,514],{},[31,485,486,489],{},[34,487,488],{},"Используйте санитайзеры при разработке",": Включайте AddressSanitizer или MemorySanitizer в процесс сборки для отладки.",[31,491,492,495],{},[34,493,494],{},"Пишите безопасный код",": Проверяйте все указатели, избегайте магических чисел для размеров массивов.",[31,497,498,501],{},[34,499,500],{},"Тестируйте на edge cases",": Проверяйте граничные условия, такие как пустые массивы, NULL-указатели.",[31,503,504,507],{},[34,505,506],{},"Регулярно обновляйте зависимости",": Следите за обновлениями библиотек и компиляторов, которые могут содержать исправления.",[31,509,510,513],{},[34,511,512],{},"Используйте современные языки и инструменты",": Языки вроде Rust имеют встроенную защиту от подобных ошибок на уровне компилятора.",[31,515,516,519],{},[34,517,518],{},"Включать core dump в продакшене",": Для продакшн-систем настройте core dump для анализа падений, но учитывайте безопасность (core dump может содержать чувствительные данные).",[521,522,523],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":126,"searchDepth":392,"depth":392,"links":525},[526,527,528,529,530,531,532,533,534],{"id":17,"depth":392,"text":18},{"id":25,"depth":392,"text":26},{"id":95,"depth":392,"text":96},{"id":167,"depth":392,"text":168},{"id":213,"depth":392,"text":214},{"id":276,"depth":392,"text":277},{"id":350,"depth":392,"text":351},{"id":450,"depth":392,"text":451},{"id":477,"depth":392,"text":478},null,"SIGSEGV","2026-02-15 21:03:12","Узнайте, как диагностировать и исправить ошибку Segmentation Fault в Linux. Пошаговые инструкции для новичков и опытных пользователей. Решите проблему за 5 минут!","medium",false,"10-30 мин","md",[544,547,550,553],{"answer":545,"question":546},"Segmentation fault (ошибка сегментации) возникает при попытке доступа к памяти, на которую у процесса нет прав, например, разыменование нулевого указателя или выход за границы массива.","Что такое segmentation fault и почему он возникает?",{"answer":548,"question":549},"Используйте отладчик GDB с core dump файлом или запустите программу под valgrind/AddressSanitizer, чтобы получить трассировку стека.","Как найти строку кода, вызывающую segmentation fault?",{"answer":551,"question":552},"Да, путём аккуратной работы с памятью: проверка указателей, использование безопасных функций, включение санитайзеров при компиляции.","Можно ли предотвратить segmentation fault?",{"answer":554,"question":555},"Segmentation fault характерен для Unix-подобных систем, но аналогичные ошибки (access violation) есть и в Windows.","Segmentation fault только в Linux или и в других ОС?",[557,560,563,566,569,572],{"name":558,"text":559},"Проверка core dump","Если программа создала core dump, используйте GDB для анализа: `gdb \u003Cпрограмма> core` и команда `bt` для backtrace.",{"name":561,"text":562},"Запуск с valgrind","Запустите программу через valgrind: `valgrind ./program` для обнаружения ошибок работы с памятью.",{"name":564,"text":565},"Использование AddressSanitizer","При компиляции добавьте флаг `-fsanitize=address` и запустите программу, чтобы получить детальный отчёт об ошибках памяти.",{"name":567,"text":568},"Проверка указателей","В коде убедитесь, что все указатели инициализированы и не равны NULL перед разыменованием.",{"name":570,"text":571},"Обновление библиотек","Обновите системные библиотеки и драйверы, так как ошибка может быть вызвана устаревшим или повреждённым ПО.",{"name":573,"text":574},"Минимальный тестовый пример","Создайте минимальный пример кода, который воспроизводит ошибку, чтобы локализовать проблему.","PT20M",[577,578,579,580,581,582,583,584,585,586],"segmentation fault linux","ошибка segmentation fault","как исправить segmentation fault","segfault в линукс","сигнал SIGSEGV","память segmentation fault","ошибка доступа к памяти linux","segmentation fault core dumped","отладка segmentation fault","линукс ошибка сегментации","ru_RU",{},true,"/errors/linux/segmentation-fault","linux",[593,594,595],"/errors/linux/bus-error","/guides/linux/gdb-tutorial","/errors/linux/stack-overflow","Ошибки Linux",{"title":5,"description":538},"high","errors/linux/segmentation-fault","Статья объясняет, что такое Segmentation Fault в Linux, его причины и предоставляет несколько способов решения проблемы, от простых до сложных.",[602,603,604,605,536,606,607],"ошибки linux","segmentation fault","отладка","память","linux errors","crash","error","lsZnwYPEHAfzCSwLsg_EIMOB3IblmVzi4PFBpG-ImsE",{"data":611,"body":612},{},{"type":613,"children":614},"root",[615],{"type":616,"tag":20,"props":617,"children":618},"element",{},[619],{"type":620,"value":545},"text",{"data":622,"body":623},{},{"type":613,"children":624},[625],{"type":616,"tag":20,"props":626,"children":627},{},[628],{"type":620,"value":548},{"data":630,"body":631},{},{"type":613,"children":632},[633],{"type":616,"tag":20,"props":634,"children":635},{},[636],{"type":620,"value":551},{"data":638,"body":639},{},{"type":613,"children":640},[641],{"type":616,"tag":20,"props":642,"children":643},{},[644],{"type":620,"value":554},{"data":646,"body":647},{},{"type":613,"children":648},[649],{"type":616,"tag":20,"props":650,"children":651},{},[652,654,660,662,667],{"type":620,"value":653},"Если программа создала core dump, используйте GDB для анализа: ",{"type":616,"tag":51,"props":655,"children":657},{"className":656},[],[658],{"type":620,"value":659},"gdb \u003Cпрограмма> core",{"type":620,"value":661}," и команда ",{"type":616,"tag":51,"props":663,"children":665},{"className":664},[],[666],{"type":620,"value":150},{"type":620,"value":668}," для backtrace.",{"data":670,"body":671},{},{"type":613,"children":672},[673],{"type":616,"tag":20,"props":674,"children":675},{},[676,678,684],{"type":620,"value":677},"Запустите программу через valgrind: ",{"type":616,"tag":51,"props":679,"children":681},{"className":680},[],[682],{"type":620,"value":683},"valgrind ./program",{"type":620,"value":685}," для обнаружения ошибок работы с памятью.",{"data":687,"body":688},{},{"type":613,"children":689},[690],{"type":616,"tag":20,"props":691,"children":692},{},[693,695,701],{"type":620,"value":694},"При компиляции добавьте флаг ",{"type":616,"tag":51,"props":696,"children":698},{"className":697},[],[699],{"type":620,"value":700},"-fsanitize=address",{"type":620,"value":702}," и запустите программу, чтобы получить детальный отчёт об ошибках памяти.",{"data":704,"body":705},{},{"type":613,"children":706},[707],{"type":616,"tag":20,"props":708,"children":709},{},[710],{"type":620,"value":568},{"data":712,"body":713},{},{"type":613,"children":714},[715],{"type":616,"tag":20,"props":716,"children":717},{},[718],{"type":620,"value":571},{"data":720,"body":721},{},{"type":613,"children":722},[723],{"type":616,"tag":20,"props":724,"children":725},{},[726],{"type":620,"value":574},[728,1848],{"id":729,"title":730,"appliesTo":731,"author":10,"body":736,"canonical":535,"code":750,"createdAt":1801,"description":1802,"difficulty":539,"draft":540,"estimatedTime":1803,"extension":542,"faq":1804,"howToSteps":1814,"howToTotalTime":575,"image":535,"keywords":1827,"locale":587,"meta":1835,"navigation":589,"path":593,"platform":591,"related":1836,"section":596,"seo":1839,"severity":598,"stem":1840,"summary":1841,"tags":1842,"twitterCreator":535,"twitterSite":535,"type":608,"updatedAt":1801,"__hash__":1847},"content_ru/errors/linux/bus-error.md","Bus Error в Linux: причины и способы исправления",[732,733,734,735],"Ubuntu 22.04+","CentOS 8+","Debian 11+","Raspberry Pi OS",{"type":12,"value":737,"toc":1792},[738,742,758,785,792,799,802,808,834,837,839,911,913,917,923,1036,1038,1042,1048,1199,1201,1203,1207,1215,1487,1489,1493,1496,1635,1637,1639,1789],[15,739,741],{"id":740},"что-означает-ошибка-bus-error","Что означает ошибка Bus Error",[20,743,744,747,748,751,752,754,755,757],{},[34,745,746],{},"Bus Error"," (сигнал ",[51,749,750],{},"SIGBUS",") — это ошибка, которую система отправляет процессу при попытке некорректного доступа к физической памяти. В отличие от Segmentation Fault (",[51,753,536],{},"), который связан с виртуальной адресацией, ",[51,756,750],{}," обычно указывает на:",[282,759,760,767,773,779],{},[31,761,762,763,766],{},"Нарушение ",[34,764,765],{},"выравнивания"," данных (например, попытка чтения 4-байтового значения по невыровненному адресу на некоторых архитектурах, таких как SPARC или старые ARM).",[31,768,769,772],{},[34,770,771],{},"Аппаратные сбои"," — проблемы с оперативной памятью (RAM), шиной (bus) или процессором.",[31,774,775,778],{},[34,776,777],{},"Повреждение данных"," при вводе-выводе (например, ошибка чтения с диска в отображённый файл).",[31,780,781,784],{},[34,782,783],{},"Ошибки в драйверах"," или ядре, приводящие к некорректному отображению памяти.",[20,786,787,788,791],{},"Типичное сообщение в логах (",[51,789,790],{},"dmesg"," или системном журнале):",[121,793,797],{"className":794,"code":796,"language":620},[795],"language-text","[12345.678] myapp[1234]: unaligned access to address 0x7fffdcba\n[12345.679] myapp[1234]: Bus error (core dumped)\n",[51,798,796],{"__ignoreMap":126},[20,800,801],{},"Или в терминале:",[121,803,806],{"className":804,"code":805,"language":620},[795],"Bus error (core dumped)\n",[51,807,805],{"__ignoreMap":126},[20,809,810,811,814,815,818,819,822,823,826,827,830,831,327],{},"Ошибка часто проявляется в ",[34,812,813],{},"высоконагруженных системах",", на ",[34,816,817],{},"Raspberry Pi",", при ",[34,820,821],{},"работе с отображёнными файлами"," (",[51,824,825],{},"mmap",") или при ",[34,828,829],{},"использовании низкоуровневых операций"," (например, прямой доступ к ",[51,832,833],{},"/dev/mem",[835,836],"hr",{},[15,838,26],{"id":25},[28,840,841,860,868,876,887,895],{},[31,842,843,846,849,850,853,854,857,858,54],{},[34,844,845],{},"Неверное выравнивание данных",[847,848],"br",{},"\nПрограмма пытается получить доступ к данным по адресу, который не кратен размеру типа данных (например, 4-байтовый ",[51,851,852],{},"int"," по адресу ",[51,855,856],{},"0x1001","). На некоторых архитектурах (SPARC, Alpha, ARM в определённых режимах) это вызывает ",[51,859,750],{},[31,861,862,865,867],{},[34,863,864],{},"Неисправности оперативной памяти (RAM)",[847,866],{},"\nСбои в модулях RAM, перегрев или несовместимость часто приводят к ошибкам шины при чтении/записи.",[31,869,870,873,875],{},[34,871,872],{},"Проблемы с диском или файловой системой",[847,874],{},"\nПовреждённые сектора на диске, ошибки в файловой системе (например, после внезапного отключения питания) могут привести к тому, что отображённый в память файл содержит некорректные данные.",[31,877,878,881,883,884,886],{},[34,879,880],{},"Ошибки в драйверах оборудования или ядре",[847,882],{},"\nСбои в драйвере (например, графического или сетевого) могут некорректно настроить таблицы страниц памяти, вызвав ",[51,885,750],{}," при доступе.",[31,888,889,892,894],{},[34,890,891],{},"Перегрев процессора или проблемные разгоны",[847,893],{},"\nНа Raspberry Pi и других одноплатных компьютерах перегрев или нестабильный разгон (overclock) часто вызывают ошибки шины.",[31,896,897,900,902,903,906,907,910],{},[34,898,899],{},"Некорректное использование системных вызовов",[847,901],{},"\nНапример, передача некорректного указателя или длины в ",[51,904,905],{},"read()","/",[51,908,909],{},"write()"," для отображённого файла, который был усечён другим процессом.",[835,912],{},[15,914,916],{"id":915},"способ-1-проверка-и-замена-оперативной-памяти","Способ 1: Проверка и замена оперативной памяти",[20,918,919,920,922],{},"Аппаратные проблемы с RAM — самая частая причина ",[51,921,750],{}," на Linux-серверах и рабочих станциях.",[28,924,925,977,989,1008],{},[31,926,927,930,932,933,958,960,961],{},[34,928,929],{},"Загрузите memtest86+",[847,931],{},"\nПерезагрузите систему и выберите memtest86+ в меню загрузчика (GRUB). Если его нет, установите:",[121,934,936],{"className":123,"code":935,"language":125,"meta":126,"style":126},"sudo apt update && sudo apt install memtest86+\n",[51,937,938],{"__ignoreMap":126},[130,939,940,942,944,946,948,950,952,955],{"class":132,"line":133},[130,941,369],{"class":136},[130,943,372],{"class":140},[130,945,375],{"class":140},[130,947,378],{"class":203},[130,949,369],{"class":136},[130,951,372],{"class":140},[130,953,954],{"class":140}," install",[130,956,957],{"class":140}," memtest86+\n",[847,959],{},"Или для RHEL/CentOS:",[121,962,964],{"className":123,"code":963,"language":125,"meta":126,"style":126},"sudo yum install memtest86+\n",[51,965,966],{"__ignoreMap":126},[130,967,968,970,973,975],{"class":132,"line":133},[130,969,369],{"class":136},[130,971,972],{"class":140}," yum",[130,974,954],{"class":140},[130,976,957],{"class":140},[31,978,979,982,984,985,988],{},[34,980,981],{},"Запустите тест",[847,983],{},"\nMemtest начнёт автоматически. Дайте ему пройти ",[34,986,987],{},"минимум 4 полных цикла"," (это может занять несколько часов). Любые ошибки (красные строки) указывают на неисправную планку RAM.",[31,990,991,994],{},[34,992,993],{},"Если ошибки найдены",[282,995,996,999,1002,1005],{},[31,997,998],{},"Выключите компьютер, отсоедините кабель питания.",[31,1000,1001],{},"Извлеките все модули RAM, протрите контакты спиртом.",[31,1003,1004],{},"Установите модули по одному, тестируя каждый слот и планку.",[31,1006,1007],{},"Замените неисправные модули.",[31,1009,1010,1013,1015,1016,1019,1020,1023,1024,1033,1035],{},[34,1011,1012],{},"Проверьте нагрев",[847,1014],{},"\nИспользуйте ",[51,1017,1018],{},"sensors"," (установите ",[51,1021,1022],{},"lm-sensors","):",[121,1025,1027],{"className":123,"code":1026,"language":125,"meta":126,"style":126},"sensors\n",[51,1028,1029],{"__ignoreMap":126},[130,1030,1031],{"class":132,"line":133},[130,1032,1026],{"class":136},[847,1034],{},"Температура RAM (если поддерживается) не должна превышать 85–90°C.",[835,1037],{},[15,1039,1041],{"id":1040},"способ-2-обновление-системы-и-ядра","Способ 2: Обновление системы и ядра",[20,1043,1044,1045,1047],{},"Устаревшие драйверы или ядро с ошибками могут вызывать ",[51,1046,750],{},", особенно при работе с новым железом.",[28,1049,1050,1120,1166,1191],{},[31,1051,1052,1055,1057,1058,1080,1082,1083,1097,1099,1100],{},[34,1053,1054],{},"Обновите все пакеты",[847,1056],{},"\nДля Ubuntu/Debian:",[121,1059,1061],{"className":123,"code":1060,"language":125,"meta":126,"style":126},"sudo apt update && sudo apt full-upgrade\n",[51,1062,1063],{"__ignoreMap":126},[130,1064,1065,1067,1069,1071,1073,1075,1077],{"class":132,"line":133},[130,1066,369],{"class":136},[130,1068,372],{"class":140},[130,1070,375],{"class":140},[130,1072,378],{"class":203},[130,1074,369],{"class":136},[130,1076,372],{"class":140},[130,1078,1079],{"class":140}," full-upgrade\n",[847,1081],{},"Для CentOS/RHEL 8+:",[121,1084,1086],{"className":123,"code":1085,"language":125,"meta":126,"style":126},"sudo dnf update\n",[51,1087,1088],{"__ignoreMap":126},[130,1089,1090,1092,1094],{"class":132,"line":133},[130,1091,369],{"class":136},[130,1093,397],{"class":140},[130,1095,1096],{"class":140}," update\n",[847,1098],{},"Для Raspberry Pi OS:",[121,1101,1102],{"className":123,"code":1060,"language":125,"meta":126,"style":126},[51,1103,1104],{"__ignoreMap":126},[130,1105,1106,1108,1110,1112,1114,1116,1118],{"class":132,"line":133},[130,1107,369],{"class":136},[130,1109,372],{"class":140},[130,1111,375],{"class":140},[130,1113,378],{"class":203},[130,1115,369],{"class":136},[130,1117,372],{"class":140},[130,1119,1079],{"class":140},[31,1121,1122,1125,1127,1128,1144,1146,1147,1163,1165],{},[34,1123,1124],{},"Установите последнее ядро",[847,1126],{},"\nНа Ubuntu:",[121,1129,1131],{"className":123,"code":1130,"language":125,"meta":126,"style":126},"sudo apt install linux-generic-hwe-22.04\n",[51,1132,1133],{"__ignoreMap":126},[130,1134,1135,1137,1139,1141],{"class":132,"line":133},[130,1136,369],{"class":136},[130,1138,372],{"class":140},[130,1140,954],{"class":140},[130,1142,1143],{"class":140}," linux-generic-hwe-22.04\n",[847,1145],{},"На CentOS:",[121,1148,1150],{"className":123,"code":1149,"language":125,"meta":126,"style":126},"sudo dnf install kernel\n",[51,1151,1152],{"__ignoreMap":126},[130,1153,1154,1156,1158,1160],{"class":132,"line":133},[130,1155,369],{"class":136},[130,1157,397],{"class":140},[130,1159,954],{"class":140},[130,1161,1162],{"class":140}," kernel\n",[847,1164],{},"Перезагрузитесь после установки.",[31,1167,1168,1171,1184,1186,1187,1190],{},[34,1169,1170],{},"Проверьте версию ядра",[121,1172,1174],{"className":123,"code":1173,"language":125,"meta":126,"style":126},"uname -r\n",[51,1175,1176],{"__ignoreMap":126},[130,1177,1178,1181],{"class":132,"line":133},[130,1179,1180],{"class":136},"uname",[130,1182,1183],{"class":196}," -r\n",[847,1185],{},"Убедитесь, что используется новая версия (например, ",[51,1188,1189],{},"5.15.0-78-generic"," или новее).",[31,1192,1193,1196,1198],{},[34,1194,1195],{},"Если проблема после обновления",[847,1197],{},"\nЗагрузитесь в предыдущее ядро из меню GRUB (Advanced options) и проверьте, исчезла ли ошибка. Если да — проблема в новом ядре, сообщите об ошибке в баг-трекер дистрибутива.",[473,1200],{},[835,1202],{},[15,1204,1206],{"id":1205},"способ-3-диагностика-диска-и-файловой-системы","Способ 3: Диагностика диска и файловой системы",[20,1208,1209,1210,1212,1213,54],{},"Ошибки чтения с диска в отображённый файл (",[51,1211,825],{},") — распространённая причина ",[51,1214,750],{},[28,1216,1217,1299,1355,1422],{},[31,1218,1219,1222,1224,1225,1228,1229,1261,1263,1264,1228,1267,1285,1287,1288,1291,1292,306,1295,1298],{},[34,1220,1221],{},"Проверьте SMART-статус дисков",[847,1223],{},"\nУстановите ",[51,1226,1227],{},"smartmontools",":",[121,1230,1232],{"className":123,"code":1231,"language":125,"meta":126,"style":126},"sudo apt install smartmontools  # Debian/Ubuntu\nsudo dnf install smartmontools  # RHEL/CentOS\n",[51,1233,1234,1248],{"__ignoreMap":126},[130,1235,1236,1238,1240,1242,1245],{"class":132,"line":133},[130,1237,369],{"class":136},[130,1239,372],{"class":140},[130,1241,954],{"class":140},[130,1243,1244],{"class":140}," smartmontools",[130,1246,1247],{"class":388},"  # Debian/Ubuntu\n",[130,1249,1250,1252,1254,1256,1258],{"class":132,"line":392},[130,1251,369],{"class":136},[130,1253,397],{"class":140},[130,1255,954],{"class":140},[130,1257,1244],{"class":140},[130,1259,1260],{"class":388},"  # RHEL/CentOS\n",[847,1262],{},"Проверка для диска ",[51,1265,1266],{},"/dev/sda",[121,1268,1270],{"className":123,"code":1269,"language":125,"meta":126,"style":126},"sudo smartctl -a /dev/sda\n",[51,1271,1272],{"__ignoreMap":126},[130,1273,1274,1276,1279,1282],{"class":132,"line":133},[130,1275,369],{"class":136},[130,1277,1278],{"class":140}," smartctl",[130,1280,1281],{"class":196}," -a",[130,1283,1284],{"class":140}," /dev/sda\n",[847,1286],{},"Ищите строки ",[51,1289,1290],{},"SMART overall-health self-assessment test result: PASSED"," и атрибуты ",[51,1293,1294],{},"Reallocated_Sector_Ct",[51,1296,1297],{},"Current_Pending_Sector",". Ненулевые значения — признак износа.",[31,1300,1301,1304,1323,1325,1326],{},[34,1302,1303],{},"Запустите тест SMART",[121,1305,1307],{"className":123,"code":1306,"language":125,"meta":126,"style":126},"sudo smartctl -t long /dev/sda\n",[51,1308,1309],{"__ignoreMap":126},[130,1310,1311,1313,1315,1318,1321],{"class":132,"line":133},[130,1312,369],{"class":136},[130,1314,1278],{"class":140},[130,1316,1317],{"class":196}," -t",[130,1319,1320],{"class":140}," long",[130,1322,1284],{"class":140},[847,1324],{},"После завершения (может занять несколько часов) проверьте результаты:",[121,1327,1329],{"className":123,"code":1328,"language":125,"meta":126,"style":126},"sudo smartctl -a /dev/sda | grep -A5 \" SMART\"\n",[51,1330,1331],{"__ignoreMap":126},[130,1332,1333,1335,1337,1339,1342,1346,1349,1352],{"class":132,"line":133},[130,1334,369],{"class":136},[130,1336,1278],{"class":140},[130,1338,1281],{"class":196},[130,1340,1341],{"class":140}," /dev/sda",[130,1343,1345],{"class":1344},"szBVR"," |",[130,1347,1348],{"class":136}," grep",[130,1350,1351],{"class":196}," -A5",[130,1353,1354],{"class":140}," \" SMART\"\n",[31,1356,1357,1360,1362,1363,1366,1367,1385,1387,1388,1391,1392,1395,1396,1412,1414,1417,1418,1421],{},[34,1358,1359],{},"Проверьте файловую систему",[847,1361],{},"\nДля ",[34,1364,1365],{},"несмонтированных"," разделов:",[121,1368,1370],{"className":123,"code":1369,"language":125,"meta":126,"style":126},"sudo fsck -f /dev/sda1\n",[51,1371,1372],{"__ignoreMap":126},[130,1373,1374,1376,1379,1382],{"class":132,"line":133},[130,1375,369],{"class":136},[130,1377,1378],{"class":140}," fsck",[130,1380,1381],{"class":196}," -f",[130,1383,1384],{"class":140}," /dev/sda1\n",[847,1386],{},"Для ",[51,1389,1390],{},"ext4"," можно добавить ",[51,1393,1394],{},"-c"," для поиска bad blocks:",[121,1397,1399],{"className":123,"code":1398,"language":125,"meta":126,"style":126},"sudo fsck -fcc /dev/sda1\n",[51,1400,1401],{"__ignoreMap":126},[130,1402,1403,1405,1407,1410],{"class":132,"line":133},[130,1404,369],{"class":136},[130,1406,1378],{"class":140},[130,1408,1409],{"class":196}," -fcc",[130,1411,1384],{"class":140},[847,1413],{},[34,1415,1416],{},"Внимание:"," Не запускайте ",[51,1419,1420],{},"fsck"," на смонтированном корневом разделе. Используйте LiveCD или загрузитесь в rescue-режиме.",[31,1423,1424,1427,1429,1430],{},[34,1425,1426],{},"Проверьте целостность отображённых файлов",[847,1428],{},"\nЕсли ошибка возникает в конкретном приложении (например, база данных), проверьте файлы его данных:",[121,1431,1433],{"className":123,"code":1432,"language":125,"meta":126,"style":126},"# Для PostgreSQL\nsudo -u postgres pg_checksums -D /var/lib/postgresql/14/main\n# Для MySQL\nsudo mysqlcheck -u root -p --all-databases --auto-repair\n",[51,1434,1435,1440,1459,1465],{"__ignoreMap":126},[130,1436,1437],{"class":132,"line":133},[130,1438,1439],{"class":388},"# Для PostgreSQL\n",[130,1441,1442,1444,1447,1450,1453,1456],{"class":132,"line":392},[130,1443,369],{"class":136},[130,1445,1446],{"class":196}," -u",[130,1448,1449],{"class":140}," postgres",[130,1451,1452],{"class":140}," pg_checksums",[130,1454,1455],{"class":196}," -D",[130,1457,1458],{"class":140}," /var/lib/postgresql/14/main\n",[130,1460,1462],{"class":132,"line":1461},3,[130,1463,1464],{"class":388},"# Для MySQL\n",[130,1466,1468,1470,1473,1475,1478,1481,1484],{"class":132,"line":1467},4,[130,1469,369],{"class":136},[130,1471,1472],{"class":140}," mysqlcheck",[130,1474,1446],{"class":196},[130,1476,1477],{"class":140}," root",[130,1479,1480],{"class":196}," -p",[130,1482,1483],{"class":196}," --all-databases",[130,1485,1486],{"class":196}," --auto-repair\n",[835,1488],{},[15,1490,1492],{"id":1491},"способ-4-отладка-проблемного-приложения","Способ 4: Отладка проблемного приложения",[20,1494,1495],{},"Если ошибка возникает только в одной программе, проблема, скорее всего, в её коде.",[28,1497,1498,1530,1571,1602],{},[31,1499,1500,1503,1505,1506,1521,1523,1524,112,1527,54],{},[34,1501,1502],{},"Запустите программу под valgrind",[847,1504],{},"\nValgrind обнаруживает ошибки доступа к памяти:",[121,1507,1509],{"className":123,"code":1508,"language":125,"meta":126,"style":126},"valgrind --tool=memcheck ./ваша_программа\n",[51,1510,1511],{"__ignoreMap":126},[130,1512,1513,1515,1518],{"class":132,"line":133},[130,1514,193],{"class":136},[130,1516,1517],{"class":196}," --tool=memcheck",[130,1519,1520],{"class":140}," ./ваша_программа\n",[847,1522],{},"Ищите сообщения ",[51,1525,1526],{},"Invalid address",[51,1528,1529],{},"Misaligned address",[31,1531,1532,1535,1537,1538,112,1540,1542,1543,1557,1559,1560,1566,1568,1569,54],{},[34,1533,1534],{},"Используйте gdb для анализа core-файла",[847,1536],{},"\nЕсли программа сбрасывает core-файл (обычно ",[51,1539,111],{},[51,1541,115],{}," в текущей директории):",[121,1544,1546],{"className":123,"code":1545,"language":125,"meta":126,"style":126},"gdb ./ваша_программа core\n",[51,1547,1548],{"__ignoreMap":126},[130,1549,1550,1552,1555],{"class":132,"line":133},[130,1551,137],{"class":136},[130,1553,1554],{"class":140}," ./ваша_программа",[130,1556,144],{"class":140},[847,1558],{},"Внутри gdb:",[121,1561,1564],{"className":1562,"code":1563,"language":620},[795],"(gdb) bt\n(gdb) info registers\n",[51,1565,1563],{"__ignoreMap":126},[847,1567],{},"Последние команды покажут стек вызовов и адрес, вызвавший ",[51,1570,750],{},[31,1572,1573,1576,1578,1579],{},[34,1574,1575],{},"Проверьте выравнивание в коде",[847,1577],{},"\nЕсли вы разработчик, убедитесь, что:",[282,1580,1581,1592,1599],{},[31,1582,1583,1584,1587,1588,1591],{},"Структуры данных выровнены (",[51,1585,1586],{},"alignas"," в C++, ",[51,1589,1590],{},"__attribute__((aligned))"," в C).",[31,1593,1594,1595,1598],{},"Используются функции для выровненного доступа (например, ",[51,1596,1597],{},"memcpy"," вместо прямого копирования через указатель при выравнивании).",[31,1600,1601],{},"Нет доступа за границы массивов.",[31,1603,1604,1607,1609,1610,1228,1613,1632,1634],{},[34,1605,1606],{},"Попробуйте скомпилировать с флагами защиты",[847,1608],{},"\nДобавьте в ",[51,1611,1612],{},"CFLAGS",[121,1614,1616],{"className":123,"code":1615,"language":125,"meta":126,"style":126},"-fsanitize=address,undefined -fno-omit-frame-pointer\n",[51,1617,1618],{"__ignoreMap":126},[130,1619,1620,1623,1626,1629],{"class":132,"line":133},[130,1621,1622],{"class":203},"-fsanitize",[130,1624,1625],{"class":1344},"=",[130,1627,1628],{"class":140},"address,undefined",[130,1630,1631],{"class":136}," -fno-omit-frame-pointer\n",[847,1633],{},"Это поможет выявить ошибки на этапе компиляции/запуска.",[835,1636],{},[15,1638,478],{"id":477},[28,1640,1641,1649,1666,1677,1709,1738,1746],{},[31,1642,1643,1646,1648],{},[34,1644,1645],{},"Регулярно тестируйте RAM",[847,1647],{},"\nЗапускайте memtest86+ раз в квартал, особенно после изменений в железе или перегрева.",[31,1650,1651,1654,1224,1656,1658,1659,1662,1663,54],{},[34,1652,1653],{},"Следите за температурами",[847,1655],{},[51,1657,1022],{}," и ",[51,1660,1661],{},"psensor"," для мониторинга. На Raspberry Pi используйте ",[51,1664,1665],{},"vcgencmd measure_temp",[31,1667,1668,1671,1673,1674,327],{},[34,1669,1670],{},"Используйте стабильные разгоны",[847,1672],{},"\nНа Raspberry Pi и других одноплатных компьютерах избегайте агрессивного overclock’а. Проверяйте стабильность стресс-тестами (",[51,1675,1676],{},"stress-ng",[31,1678,1679,1682,1684,1685,1700,1702,1703,112,1706,327],{},[34,1680,1681],{},"Обновляйте прошивку",[847,1683],{},"\nДля Raspberry Pi:",[121,1686,1688],{"className":123,"code":1687,"language":125,"meta":126,"style":126},"sudo rpi-eeprom-update -a\n",[51,1689,1690],{"__ignoreMap":126},[130,1691,1692,1694,1697],{"class":132,"line":133},[130,1693,369],{"class":136},[130,1695,1696],{"class":140}," rpi-eeprom-update",[130,1698,1699],{"class":196}," -a\n",[847,1701],{},"Для серверов — обновляйте BIOS/UEFI и микрокод процессора (",[51,1704,1705],{},"intel-microcode",[51,1707,1708],{},"amd-microcode",[31,1710,1711,1714,1716,1717],{},[34,1712,1713],{},"Корректно обрабатывайте отображённые файлы",[847,1715],{},"\nВ коде:",[282,1718,1719,1728,1731],{},[31,1720,1721,1722,1724,1725,54],{},"Всегда проверяйте результат ",[51,1723,825],{}," на ",[51,1726,1727],{},"MAP_FAILED",[31,1729,1730],{},"Убедитесь, что размер файла не меняется другим процессом во время отображения.",[31,1732,1733,1734,1737],{},"Используйте ",[51,1735,1736],{},"msync"," для синхронизации изменений.",[31,1739,1740,1743,1745],{},[34,1741,1742],{},"Выбирайте качественные компоненты",[847,1744],{},"\nПри сборке системы отдавайте предпочтение ECC-памяти (на серверах) и сертифицированным дискам. На Raspberry Pi используйте официальный блок питания и качественную SD-карту (Class 10/UHS-I).",[31,1747,1748,1751,1609,1753,1756,1757,1228,1759,1779,1781,1782,112,1785,1788],{},[34,1749,1750],{},"Настройте мониторинг",[847,1752],{},[51,1754,1755],{},"syslog"," фильтр для ",[51,1758,750],{},[121,1760,1762],{"className":123,"code":1761,"language":125,"meta":126,"style":126},"sudo grep -i \"bus error\" /var/log/syslog\n",[51,1763,1764],{"__ignoreMap":126},[130,1765,1766,1768,1770,1773,1776],{"class":132,"line":133},[130,1767,369],{"class":136},[130,1769,1348],{"class":140},[130,1771,1772],{"class":196}," -i",[130,1774,1775],{"class":140}," \"bus error\"",[130,1777,1778],{"class":140}," /var/log/syslog\n",[847,1780],{},"Настройте оповещения (например, через ",[51,1783,1784],{},"logwatch",[51,1786,1787],{},"fail2ban"," для повторяющихся ошибок).",[521,1790,1791],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":126,"searchDepth":392,"depth":392,"links":1793},[1794,1795,1796,1797,1798,1799,1800],{"id":740,"depth":392,"text":741},{"id":25,"depth":392,"text":26},{"id":915,"depth":392,"text":916},{"id":1040,"depth":392,"text":1041},{"id":1205,"depth":392,"text":1206},{"id":1491,"depth":392,"text":1492},{"id":477,"depth":392,"text":478},"2026-02-16 09:43:33","Узнайте, что такое ошибка Bus Error в Linux и как её быстро исправить. Пошаговое руководство по диагностике памяти, обновлению системы и отладке программ для Ubuntu, CentOS и других дистрибутивов.","15-30 мин",[1805,1808,1811],{"question":1806,"answer":1807},"Чем Bus Error отличается от Segmentation Fault?","Segmentation Fault (SIGSEGV) связан с доступом к виртуальной памяти вне выделенного диапазона, а Bus Error (SIGBUS) — с физической памятью, обычно из-за выравнивания или аппаратных проблем.",{"question":1809,"answer":1810},"Можно ли исправить Bus Error без перезагрузки системы?","Да, если причина в конкретном процессе — завершите его. Но если проблема в оборудовании или ядре, перезагрузка может быть необходима после устранения причины.",{"question":1812,"answer":1813},"Почему Bus Error часто возникает на Raspberry Pi?","На Raspberry Pi это часто связано с перегревом, проблемами с SD-картой или нестабильным питанием, что приводит к ошибкам доступа к памяти.",[1815,1818,1821,1824],{"name":1816,"text":1817},"Проверьте оперативную память","Запустите memtest86+ для диагностики аппаратных проблем с RAM. Это самый частый источник ошибок Bus.",{"name":1819,"text":1820},"Обновите систему и ядро","Установите последние обновления, так как ошибки в драйверах или ядре могут вызывать SIGBUS.",{"name":1822,"text":1823},"Проверьте жёсткие диски и файловую систему","Используйте smartctl и fsck для поиска проблем с хранилищем, которые могут приводить к повреждению данных в памяти.",{"name":1825,"text":1826},"Отладьте проблемное приложение","Если ошибка возникает в конкретной программе, используйте valgrind или gdb для выявления ошибок доступа к памяти в коде.",[1828,1829,1830,1831,1832,583,1833,1834],"bus error linux","ошибка bus error","sigbus linux что это","bus error решение","bus error ubuntu","bus error centos","исправить bus error",{},[590,1837,1838],"/guides/linux/memory-test","/errors/linux/io-error",{"title":730,"description":1802},"errors/linux/bus-error","Ошибка Bus Error возникает при некорректном доступе к физической памяти. В статье подробно разбираются причины — от аппаратных проблем до ошибок в коде — и даются проверенные способы решения для Linux-систем.",[591,1843,1844,1845,605,750,1846],"ошибки","bus error","сигнал","аппаратные ошибки","gqMhkoxxwAhwxeqLpXnEDyOwTpG5aodw1s19R2hTEno",{"id":1849,"title":1850,"appliesTo":1851,"author":10,"body":1856,"canonical":535,"code":2203,"createdAt":2204,"description":2205,"difficulty":539,"draft":540,"estimatedTime":2206,"extension":542,"faq":2207,"howToSteps":2220,"howToTotalTime":2233,"image":535,"keywords":2234,"locale":587,"meta":2241,"navigation":589,"path":595,"platform":591,"related":2242,"section":596,"seo":2246,"severity":539,"stem":2247,"summary":2248,"tags":2249,"twitterCreator":535,"twitterSite":535,"type":608,"updatedAt":2204,"__hash__":2254},"content_ru/errors/linux/stack-overflow.md","Переполнение стека в Linux: причины и быстрое исправление",[1852,1853,1854,1855],"Ubuntu 20.04/22.04/24.04 LTS","Debian 11/12","Fedora 38+","Любые дистрибутивы Linux с ядром 5.0+",{"type":12,"value":1857,"toc":2192},[1858,1862,1875,1877,1911,1915,1923,1926,1931,1943,1948,1977,1982,1995,1999,2002,2007,2022,2035,2052,2060,2062,2066,2069,2074,2096,2101,2126,2134,2150,2162,2164,2189],[15,1859,1861],{"id":1860},"что-означает-ошибка-stack-overflow-sigsegv-11","Что означает ошибка Stack overflow / SIGSEGV (11)",[20,1863,1864,1865,1867,1868,112,1871,1874],{},"В Linux эта проблема проявляется как сигнал ",[51,1866,536],{}," с сообщением ",[51,1869,1870],{},"Segmentation fault (core dumped)",[51,1872,1873],{},"Stack smashing detected",". Ошибка возникает, когда процесс исчерпывает выделенную ему область памяти стека. По умолчанию в большинстве дистрибутивов лимит жёстко зафиксирован на уровне 8 МБ. Если программа пытается записать данные за пределы этого участка, ядро Linux аварийно завершает процесс, чтобы предотвратить повреждение соседних областей памяти или сбой всей системы.",[15,1876,26],{"id":25},[28,1878,1879,1885,1895,1905],{},[31,1880,1881,1884],{},[34,1882,1883],{},"Бесконечная или слишком глубокая рекурсия."," Функция вызывает саму себя без корректного условия выхода, быстро заполняя стек кадрами вызовов.",[31,1886,1887,1890,1891,1894],{},[34,1888,1889],{},"Объявление крупных локальных массивов."," Попытка создать массив размером в несколько мегабайт внутри функции (например, ",[51,1892,1893],{},"double matrix[1000][1000]",") мгновенно резервирует место в стеке и вызывает сбой.",[31,1896,1897,1900,1901,1904],{},[34,1898,1899],{},"Некорректная настройка потоков."," При создании потоков через ",[51,1902,1903],{},"pthread_create"," можно вручную задать слишком маленький размер стека, который не подходит для вашей бизнес-логики.",[31,1906,1907,1910],{},[34,1908,1909],{},"Переполнение буфера."," Запись данных за границы выделенной переменной активирует защиту компилятора (stack canary) и принудительно останавливает выполнение приложения.",[15,1912,1914],{"id":1913},"способы-решения","Способы решения",[1916,1917,1919,1920],"h3",{"id":1918},"способ-1-временное-увеличение-лимита-через-ulimit","Способ 1: Временное увеличение лимита через ",[51,1921,1922],{},"ulimit",[20,1924,1925],{},"Если вам нужно срочно запустить программу для тестирования или обработки данных, проще всего снять ограничение только для текущей сессии терминала.",[28,1927,1928],{},[31,1929,1930],{},"Проверьте текущий лимит в килобайтах:",[121,1932,1934],{"className":123,"code":1933,"language":125,"meta":126,"style":126},"ulimit -s\n",[51,1935,1936],{"__ignoreMap":126},[130,1937,1938,1940],{"class":132,"line":133},[130,1939,1922],{"class":196},[130,1941,1942],{"class":196}," -s\n",[28,1944,1945],{"start":392},[31,1946,1947],{},"Увеличьте лимит до 16 МБ или снимите его полностью:",[121,1949,1951],{"className":123,"code":1950,"language":125,"meta":126,"style":126},"ulimit -s 16384\n# или полностью снять ограничение для сессии\nulimit -s unlimited\n",[51,1952,1953,1963,1968],{"__ignoreMap":126},[130,1954,1955,1957,1960],{"class":132,"line":133},[130,1956,1922],{"class":196},[130,1958,1959],{"class":196}," -s",[130,1961,1962],{"class":196}," 16384\n",[130,1964,1965],{"class":132,"line":392},[130,1966,1967],{"class":388},"# или полностью снять ограничение для сессии\n",[130,1969,1970,1972,1974],{"class":132,"line":1461},[130,1971,1922],{"class":196},[130,1973,1959],{"class":196},[130,1975,1976],{"class":140}," unlimited\n",[28,1978,1979],{"start":1461},[31,1980,1981],{},"Запустите вашу программу в том же окне терминала. Изменения действуют до закрытия сессии и не влияют на другие запущенные сервисы.",[156,1983,1984],{},[20,1985,1986,1987,1990,1991,1994],{},"💡 Совет: Значение ",[51,1988,1989],{},"unlimited"," снимает жёсткое ограничение оболочки, но процесс всё равно ограничен физической оперативной памятью и параметром ",[51,1992,1993],{},"vm.max_map_count"," ядра.",[1916,1996,1998],{"id":1997},"способ-2-постоянное-изменение-лимита-через-pam","Способ 2: Постоянное изменение лимита через PAM",[20,2000,2001],{},"Чтобы изменения сохранялись после перезагрузки и применялись автоматически при входе, отредактируйте глобальную конфигурацию лимитов.",[28,2003,2004],{},[31,2005,2006],{},"Откройте файл конфигурации с правами суперпользователя:",[121,2008,2010],{"className":123,"code":2009,"language":125,"meta":126,"style":126},"sudo nano /etc/security/limits.conf\n",[51,2011,2012],{"__ignoreMap":126},[130,2013,2014,2016,2019],{"class":132,"line":133},[130,2015,369],{"class":136},[130,2017,2018],{"class":140}," nano",[130,2020,2021],{"class":140}," /etc/security/limits.conf\n",[28,2023,2024],{"start":392},[31,2025,2026,2027,2030,2031,2034],{},"Добавьте в конец файла строки (замените ",[51,2028,2029],{},"username"," на ваше имя или используйте ",[51,2032,2033],{},"*"," для всех пользователей):",[121,2036,2040],{"className":2037,"code":2038,"language":2039,"meta":126,"style":126},"language-ini shiki shiki-themes github-light github-dark","username soft stack 32768\nusername hard stack 32768\n","ini",[51,2041,2042,2047],{"__ignoreMap":126},[130,2043,2044],{"class":132,"line":133},[130,2045,2046],{},"username soft stack 32768\n",[130,2048,2049],{"class":132,"line":392},[130,2050,2051],{},"username hard stack 32768\n",[28,2053,2054],{"start":1461},[31,2055,2056,2057,54],{},"Сохраните файл, полностью выйдите из системы и войдите снова. Проверьте применение изменений командой ",[51,2058,2059],{},"ulimit -s",[473,2061],{},[1916,2063,2065],{"id":2064},"способ-3-поиск-и-исправление-проблемного-кода-с-gdb","Способ 3: Поиск и исправление проблемного кода с GDB",[20,2067,2068],{},"Увеличение стека — лишь временная мера. Если ошибка вызвана архитектурными недочётами программы, её необходимо найти и исправить на уровне исходного кода.",[28,2070,2071],{},[31,2072,2073],{},"Скомпилируйте проект с отладочными символами:",[121,2075,2077],{"className":123,"code":2076,"language":125,"meta":126,"style":126},"gcc -g -O0 -o my_app main.c\n",[51,2078,2079],{"__ignoreMap":126},[130,2080,2081,2083,2085,2088,2090,2093],{"class":132,"line":133},[130,2082,232],{"class":136},[130,2084,238],{"class":196},[130,2086,2087],{"class":196}," -O0",[130,2089,241],{"class":196},[130,2091,2092],{"class":140}," my_app",[130,2094,2095],{"class":140}," main.c\n",[28,2097,2098],{"start":392},[31,2099,2100],{},"Запустите отладчик и выполните программу:",[121,2102,2104],{"className":123,"code":2103,"language":125,"meta":126,"style":126},"gdb ./my_app\n(gdb) run\n",[51,2105,2106,2113],{"__ignoreMap":126},[130,2107,2108,2110],{"class":132,"line":133},[130,2109,137],{"class":136},[130,2111,2112],{"class":140}," ./my_app\n",[130,2114,2115,2118,2120,2123],{"class":132,"line":392},[130,2116,2117],{"class":203},"(",[130,2119,137],{"class":136},[130,2121,2122],{"class":203},") ",[130,2124,2125],{"class":136},"run\n",[28,2127,2128],{"start":1461},[31,2129,2130,2131,2133],{},"При падении введите ",[51,2132,150],{}," (backtrace) для просмотра полного стека вызовов:",[121,2135,2137],{"className":123,"code":2136,"language":125,"meta":126,"style":126},"(gdb) bt\n",[51,2138,2139],{"__ignoreMap":126},[130,2140,2141,2143,2145,2147],{"class":132,"line":133},[130,2142,2117],{"class":203},[130,2144,137],{"class":136},[130,2146,2122],{"class":203},[130,2148,2149],{"class":136},"bt\n",[28,2151,2152],{"start":1467},[31,2153,2154,2155,112,2158,2161],{},"Найдите повторяющуюся функцию или укажите на строку в вашем коде. Измените логику: замените рекурсию на итеративный цикл, а крупные локальные массивы перенесите в кучу через ",[51,2156,2157],{},"malloc()",[51,2159,2160],{},"std::vector",". Скомпилируйте заново и протестируйте.",[15,2163,478],{"id":477},[20,2165,2166,2167,1658,2170,2173,2174,2177,2178,2181,2182,112,2185,2188],{},"Регулярная проверка кода на предмет утечек и аномалий экономит часы отладки. Всегда компилируйте проекты с включёнными флагами безопасности: ",[51,2168,2169],{},"-fstack-protector-strong",[51,2171,2172],{},"-Wall -Wextra",". Для многопоточных приложений явно задавайте размер стека через ",[51,2175,2176],{},"pthread_attr_setstacksize()",", а не полагайтесь на системный дефолт. Если работаете с большими структурами данных, размещайте их в динамической памяти (куче) или используйте ",[51,2179,2180],{},"static"," для глобального доступа. Настройте статический анализ в CI/CD пайплайне с помощью инструментов вроде ",[51,2183,2184],{},"Valgrind",[51,2186,2187],{},"AddressSanitizer",", чтобы отлавливать переполнения до выкатки в продакшен.",[521,2190,2191],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":126,"searchDepth":392,"depth":392,"links":2193},[2194,2195,2196,2202],{"id":1860,"depth":392,"text":1861},{"id":25,"depth":392,"text":26},{"id":1913,"depth":392,"text":1914,"children":2197},[2198,2200,2201],{"id":1918,"depth":1461,"text":2199},"Способ 1: Временное увеличение лимита через ulimit",{"id":1997,"depth":1461,"text":1998},{"id":2064,"depth":1461,"text":2065},{"id":477,"depth":392,"text":478},"SIGSEGV (11)","2026-04-08 00:15:25","Столкнулись с ошибкой Stack overflow или SIGSEGV в Linux? Узнайте точные причины и получите пошаговую инструкцию по увеличению лимита и отладке за 10 минут.","10-15 мин",[2208,2211,2214,2217],{"question":2209,"answer":2210},"Почему возникает ошибка Stack overflow при запуске программы?","Процесс превысил системный лимит стека (обычно 8 МБ). Это происходит из-за бесконечной рекурсии, слишком больших локальных массивов или глубоких цепочек вызовов функций.",{"question":2212,"answer":2213},"Безопасно ли увеличивать размер стека через ulimit?","Да, это безопасный временный параметр для текущей сессии терминала. Он не влияет на другие процессы и сбрасывается при перезагрузке. Для постоянных изменений используйте `limits.conf`.",{"question":2215,"answer":2216},"Как отличить переполнение стека от нехватки оперативной памяти?","Переполнение стека (`SIGSEGV`) затрагивает только один процесс и вызывается исчерпанием лимита вызовов. OOM-killer (`Out of memory`) останавливает процесс при полном исчерпании RAM и swap.",{"question":2218,"answer":2219},"Можно ли отключить защиту компилятора от переполнения?","Технически можно скомпилировать с флагом `-fno-stack-protector`, но это крайне не рекомендуется. Отключение защиты делает программу уязвимой к эксплойтам переполнения буфера.",[2221,2224,2227,2230],{"name":2222,"text":2223},"Проверка текущего лимита стека","Выполните в терминале команду `ulimit -s`, чтобы узнать текущий размер стека в килобайтах. Стандартное значение обычно равно 8192 (8 МБ).",{"name":2225,"text":2226},"Временное увеличение лимита","Введите `ulimit -s 16384` или `ulimit -s unlimited`. Это применится только к текущей сессии и процессам, запущенным из неё.",{"name":2228,"text":2229},"Постоянная настройка через limits.conf","Откройте `/etc/security/limits.conf` через `sudo nano`, добавьте строку `* soft stack 16384` и перезайдите в систему для применения изменений.",{"name":2231,"text":2232},"Отладка с помощью GDB","Запустите программу командой `gdb ./ваша_программа`, затем введите `run`. При падении используйте `bt`, чтобы увидеть стек вызовов и найти проблемную функцию.","PT15M",[2235,2236,2237,2238,2239,2240,1873],"stack overflow linux","ошибка переполнения стека","SIGSEGV 11 linux исправить","увеличить ulimit stack","Segmentation fault стек","как отладить stack overflow",{},[2243,2244,2245],"/errors/linux/segfault-c","/guides/linux/increase-ulimit","/guides/linux/gdb-debug-basics",{"title":1850,"description":2205},"errors/linux/stack-overflow","Ошибка Stack overflow в Linux возникает при превышении лимита памяти стека. Разберём причины сбоя и покажем проверенные способы увеличения лимита и исправления кода.",[2250,2251,536,1922,2252,2253],"linux-errors","переполнение-стека","debugging","memory-management","221A_H9UCJr4WnR3gLrSo06rVGsORlDpyM5e02aKsSw"]