В следующем C++
коде, я пытаюсь загрузить функцию из общей библиотеки.Указатели преобразования segfault с reinterpret_cast
void* tmp = dlsym(dl_lib, symbol);
_fun = reinterpret_cast<plot_sample_fun*>(tmp);
Однако reinterpret_cast
ошибку сегментации при преобразовании указателей. Что здесь не так?
Edit:
Для обеспечения дальнейшего контекста,
typedef void plot_sample_fun(const void *, double **, char ***, size_t *);
class Foo {
void bar(); // Loads _fun as above.
plot_sample_fun* _fun;
};
Вы можете прочитать http://stackoverflow.com/questions/310451/should-i-use-static-cast-or-reinterpret-cast-when-casting-a-void-to-whatever – chrizke
Что такое _fun? То, что reinterpret_cast не делает исключение само по себе. Это только заставляет компилятор полагать, что указатель имеет какой-то тип. Но это segfault - это сохранение указателя в другом месте памяти. – AlexanderVX
Действительно ли это 'reinterpret_cast', что segfaults, а не более поздняя версия указателя? И почему вы не проверяете, что это не null? –