Я пытаюсь поймать ошибку на памяти только для чтения, но не могу это сделать? Если я обрабатываю ошибку, то она может продолжить или только опция exit/abort?Как поймать ошибку SIGBUS?
#include<iostream>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
char * F00()
{
char *s2="ab";
return s2;
}
void InvalidMem()
{
(F00())[0]='l';
}
void
termination_handler (int signum)
{
fprintf(stderr,"BUS error");
}
int
main(int argc, char **argv)
{
signal (SIGBUS, termination_handler);
InvalidMem();
for(int i = 0; i < 10; ++i)
std::cout<<" L " ;
return 0;
}
Продолжить с какой точки? –
Попытка продолжения такого серьезного сбоя * возможно, но как вы узнаете, что программа находится в таком состоянии, что она может безопасно продолжать? Короче: вы не можете. Вместо того, чтобы пытаться «поймать» крах и попытаться продолжить, вы должны найти основную причину сбоя и исправить эту проблему, а не просто проигнорировать ее. –
Joachim, я согласен с вами в отношении состояния, но означает ли это, если я поймаю сигнал, тогда программа может продолжить с точки, которая вызывает повышение сигнала. – CrazyC