2011-11-26 180 views
0

出于某种原因,下面的代码会导致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",可能导致它?如果是这样,我该如何解决?

+0

如果你检查,而不是假设他们总是返回= NULL的返回值,这将有助于。 –

+0

断言确认加载的符号是正确的。 –

回答

2

您定义的指针指向功能做到这一点:

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

,并呼吁:

CSShow_New(str); 
相关问题