Вопрос по арифметике указателей - PullRequest
0 голосов
/ 01 апреля 2010

Привет всем! Я пытаюсь создать систему управления памятью, чтобы пользователь мог вызвать myMalloc, метод, который я создал. У меня есть связанный список отслеживания моей свободной памяти. Моя проблема, когда я пытаюсь найти конец свободного бита в моем связанном списке. Я пытаюсь добавить размер свободной памяти в этом разделе (который находится в связанном списке) к указателю на лицевую сторону свободного места, как это.

void *tailEnd = previousPlace->head_ptr + ((previousPlace->size+1)*(sizeof(int));

Я надеялся, что это даст мне указатель на конец этого сегмента. Тем не менее, я продолжаю получать предупреждение:

"указатель типа 'void *', используемый в арифметике"

Есть ли лучший способ сделать это? Спасибо!

Ответы [ 2 ]

5 голосов
/ 01 апреля 2010

Арифметика указателя использует размер базового типа. Если int 4 байта:

int *p = some_address;
p++; 

увеличит p на 4 байта. void нельзя использовать в арифметике указателей, потому что void не имеет размера, связанного с. Если вы хотите выполнить арифметику байтового размера для указателей void, вам нужно привести указатели к типу байтового размера.

1 голос
/ 01 апреля 2010
int *tailEnd = ( int* ) ( previousPlace->head_ptr + ((previousPlace->size+1)*(sizeof(int)) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...