TGViewer
C/C++ Development | YeaHub C/C++ Development | YeaHub @yeahub_c_development · 741 subscribers
Post #313 424
#полезное
🤯 Отлавливайте сегфолты во время выполнения на C

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

static void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) {
(void)ucontext; // используем это, если нужно, иначе отключаем предупреждение компилятора

// Обрабатываем сегфолт здесь
// записываем несохраненные данные, логируем ошибки и т.д.
fprintf(stderr, "Сегфолт пойман по адресу %p, ваши данные сохранены!\n", info->si_addr);
exit(EXIT_FAILURE);
}

int main(void) {
struct sigaction sig_a = {
.sa_sigaction = handle_sigsegv, // указатель на функцию обработки нашего сегфолта
.sa_flags = SA_SIGINFO,
};

sigemptyset(&sig_a.sa_mask);

if (sigaction(SIGSEGV, &sig_a, NULL) == -1) {
perror("sigaction не удалась");
return 1;
}

printf("Этот код выполняется перед сегфолтом!\n");

// намеренно вызываем сегфолт
int *p = NULL;
*p = 1;

printf("Это не выполнится из-за сегфолта!\n");

return 0;
}


На фото ошибка: в условии sigaction надо сравнивать с «-1», а не с «1»

👉Новости 👉База вопросов
More from @yeahub_c_development
  1. Oct 12, 2026#Собес #heap #stack #memory 🤔 Где будут располагаться переменные типа массив и map — на к…
  2. Oct 9, 2026#video #архитектура 📚 Road to Highload: видеопроект о проектировании архитектуры высокона…
  3. Oct 8, 2026#Собес #Docker_Registry #container_registry #Docker_Hub 🤔 Что такое Docker Registry и для…
  4. Oct 7, 2026#Собес #stack #heap #memory_management 🤔 Как отличается время жизни объектов в стеке и ку…
  5. Oct 5, 2026#Собес #stl #containers #algorithms 🤔 Что такое STL в C++? 💬 Кратко: STL (Standard Templ…
  6. Oct 2, 2026#trainer #tutorials #exercise 📚 W3schools На сайте представлены интерактивные уроки и спр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →