我需要在运行时打开多个共享库。我不知道他们的号码(计数),所以我使用动态内存分配:
void* handle= new void* [n]; // n refers to number of handles
handle[0] = dlopen("./fileN.so", RTLD_LAZY); // doesn't work : Error: ‘void*’ is not a pointer-to-object type
但是,如果我进行静态分配,它会起作用 -
void* handle[10];
handle[0] = dlopen("./file0.so", RTLD_LAZY); // works
为什么当我动态访问句柄时,我收到错误?以及如何解决?
答案 0 :(得分:4)
您需要额外的间接级别。指向指针的指针:
void** handle= new void* [n];
^
您的代码在其他类型上无效:
int* handle= new int* [n]; // error assigning int** to int*
但它适用于void*
,因为void*
可以指向void**
。
答案 1 :(得分:1)
您需要将handle
声明为void**
,而不是void*
。