Ошибка: «void *» не является ошибкой типа указателя на объект при динамическом открытии нескольких общих библиотек - PullRequest
2 голосов
/ 22 января 2012

Мне нужно открыть несколько общих библиотек во время выполнения.Я не знаю их количество (количество), поэтому я использую динамическое распределение памяти:

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

Почему этокогда я получаю динамический доступ к дескриптору, я получаю ошибку?и как мне это исправить?

Ответы [ 2 ]

4 голосов
/ 22 января 2012

Вам нужен дополнительный уровень косвенности. Указатель на указатель:

void** handle= new void* [n];
     ^

Ваш код будет неверным для другого типа:

int* handle= new int* [n]; // error assigning int** to int*

Но он работает с void*, так как void* может указывать на void**.

1 голос
/ 22 января 2012

Вам нужно объявить handle как void**, а не void*.

...