2013-04-12 7 views
-1

У меня есть набор указателей void, которые я хотел бы добавить в массив указателей void. Я начинаю с malloc:разыменовывать массив указателей void

void **p2vals=malloc(nelems*sizeof(void*)); 

.., который дает мне массив указателей на указатели. Но тогда я хочу разыменовать p2vals как * p2vals, который предположительно получает мне один указатель на пустоту. Конечно, компилятор ему не нравится, но мне это нужно. Я хочу, чтобы установить

*(p2vals+someoffset)=somevoidptr; 
+0

«Конечно, компилятор ему не нравится»? Имея в виду? –

+0

И в чем проблема? –

+2

Какие ошибки/предупреждения у вас есть? Не могли бы вы подробнее рассказать о своих проблемах? –

ответ

0

Если вы хотите сохранить адрес памяти в качестве переменной, я предлагаю вам использовать uintptr_t вместо void * .И если вы хотите написать или прочитать любое смещение, просто сделать (uintptr_t)((char *)(pointer) + offset) ,

+0

это идея, которая мне нужна. –

0

Рассмотрим,

int a = 5; 
int *p = &a; 

В этом случае мы укажем компилятору, что р собирается указать на целое число. Поэтому известно, что когда мы делаем что-то вроде *p, во время выполнения, нет. байтов, равных размеру int, будет считан.

Различия в указателях пустоты, компилятор не поймет, сколько байтов нужно точно прочитать. Вы должны типаж их некоторые type, прежде чем использовать их

Смежные вопросы