В реализации основного бассейна у меня есть что-то вроде этого (я буду упрощать код понятнее)Преобразование из пустоты * на символ * в реализации пула
struct unit_header{
struct unit_header* next, prev;
};
int number_of_units = 10
int unit_size = 5;
int full_block = number_of_units*(unit_size+sizeof(struct unit_header));
void* p_mem_full_block = malloc(full_block);
//iterate all units of mem_full_block
for (int i = 0; i< number_of_units; i++){
//pointer to each unit
struct unit_header* p_units = (struct unit_header*)((char*)p_mem_full_block + i*(unit_size+sizeof(struct unit_header)));
//.... some pointers stuff....
}
Я знаю, что это часть (ниже) используется, чтобы пройти через все подразделения mem_block ...
i * (unit_size+sizeof(struct unit_header))
Я не понял, что эта часть:
(символ *) p_mem_full_block
средства. Почему я должен сделать это преобразование char *?
Возможно, это связано с тем, что указатель на указатель 'void' является незаконным, и вы пытаетесь добавить какое-то значение этому указателю. см. [this] (http://stackoverflow.com/questions/3523145/pointer-arithmetic-for-void-pointer-in-c) –