Вызов функции указатель приводит к segfault? - PullRequest
0 голосов
/ 26 ноября 2011

По какой-то причине следующий код вызывает SIGSEGV, когда я пытаюсь вызвать CFShow_New:

Тип определения:

typedef void* (*CFShow_XX)(CFTypeRef lol);

Фактический код:

ImageLoaderMachO* loader =
dyld::getDyldImage("/XXX/CoreFoundation");

Symbol cfshow_sym = loader->findSymbol("_CFShow");
CFShow_XX* CFShow_New = (CFShow_XX*)cfshow_sym.nl.n_value;

assert(cfshow_sym.nl.n_value == (uint32_t)CFShow);

CFStringRef str = CFSTR("Test123");

CFShow(str); /* Works */
(*CFShow_New)(str); /* SIGSEGV's */

В чем может быть проблема?CFShow - это extern "C", это может быть причиной?И если да, то как мне это исправить?

1 Ответ

3 голосов
/ 26 ноября 2011

Вы определили указатель на указатель на функцию:

CSShow_XX CFShow_New = (CFShow_XX)cfshow_sym.nl.n_value;

и звоните:

CSShow_New(str);
...