Я испытываю большое сочувствие к вашему вопросу, так как сам нахожусь в почти идентичной позиции. Я ценю то, что говорят многие ответы, и они верны - подпрограмма, предоставляющая указатель , должна предоставлять действительный указатель. В моем случае это почти немыслимо, что они могли испортить указатель - но если бы они имели управляемый, это было бы МОЕ программное обеспечение, которое терпит крах, и ME, который бы получил вину: - (
Мое требование не состоит в том, чтобы я продолжал после ошибки сегментации - это было бы опасно - я просто хочу сообщить о том, что произошло с клиентом, прежде чем завершить работу, чтобы они могли исправить свой код, а не обвинять меня!
Вот как я нашел это (в Windows): http://www.cplusplus.com/reference/clibrary/csignal/signal/
Чтобы дать краткий обзор:
#include <signal.h>
using namespace std;
void terminate(int param)
/// Function executed if a segmentation fault is encountered during the cast to an instance.
{
cerr << "\nThe function received a corrupted reference - please check the user-supplied dll.\n";
cerr << "Terminating program...\n";
exit(1);
}
...
void MyFunction()
{
void (*previous_sigsegv_function)(int);
previous_sigsegv_function = signal(SIGSEGV, terminate);
<-- insert risky stuff here -->
signal(SIGSEGV, previous_sigsegv_function);
}
Теперь этот выглядит , который ведет себя так, как я надеюсь (он печатает сообщение об ошибке, затем завершает программу) - но если кто-то может заметить ошибку, пожалуйста, дайте мне знать!