Кажется, что новая версия (1.2.0) недоступна для загрузки на сайте http://www.achartengine.org/ . и поэтому метод gradle / maven не работает (или файл моментального снимка был удален). Мне удалось использовать и добавить его в мой проект, загрузив файл jar отсюда: https://github.com/ddanny/achartengine/files/460139/achartengine-1.2.0.zip
В Linux они тоже могут быть исключениями.
Обычно, когда ваша программа выполняет ошибку сегментации, ей посылается сигнал SIGSEGV
. Вы можете настроить свой собственный обработчик для этого сигнала и смягчить последствия. Конечно, вы действительно должны быть уверены, что сможете оправиться от ситуации. В вашем случае, я думаю, вам следует вместо этого отладить свой код.
Вернемся к теме. Недавно я обнаружил библиотеку ( краткое руководство ), которая преобразует такие сигналы в исключения, так что вы можете написать такой код:
try
{
*(int*) 0 = 0;
}
catch (std::exception& e)
{
std::cerr << "Exception caught : " << e.what() << std::endl;
}
Но не проверял. Работает на моем компьютере с Gentoo x86-64. Он имеет платформенно-зависимый бэкэнд (заимствованный из java-реализации gcc), поэтому он может работать на многих платформах. Он просто поддерживает x86 и x86-64 из коробки, но вы можете получить бэкэнд из libjava, который находится в исходных кодах gcc.
Вот пример того, как это сделать в C.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
printf("Caught segfault at address %p\n", si->si_addr);
exit(0);
}
int main(void)
{
int *foo = NULL;
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;
sa.sa_flags = SA_SIGINFO;
sigaction(SIGSEGV, &sa, NULL);
/* Cause a seg fault */
*foo = 1;
return 0;
}