The bug disturbed me about two days: when running the code I have a runtime error of \"terminate called without an active exception\\n Aborted\",why?
I try to locate the
Like Gearoid Murphy said the error happens when the thread object is destructed before the thread function itself has been fully executed. I detected this error using tinythread library (http://tinythreadpp.bitsnbites.eu/):
Before:
#include "tinythread.h"
...
void fork_thread(void (*function_pointer)(void * arg), void * arg_pointer) {
tthread::thread t(function_pointer, arg_pointer);
// t is destructed here, causing the "terminate called ..." error
}
After:
#include "tinythread.h"
...
void fork_thread(void (*function_pointer)(void * arg), void * arg_pointer) {
tthread::thread * t = new tthread::thread(function_pointer, arg_pointer);
// now the new thread object is not destructed here, preventing
// the "terminate called ..." error. Remember that because thread
// object must now be destructed explicitly (i.e. manually) with delete
// call you should store the pointer t to a vector of thread pointers
// for example.
}