void set_next_block_size(long long int * current, long long int size){
*(current+1+size/8)=size;
}
Я предположил, что значение в () будет текущим + 8 + размер, так как тип long long int занимает 8 байтов, но на самом деле он рассчитывается как текущий + 1 + размер / 8 ..
Вы ошиблись.И из первого фрагмента вы, похоже, знаете правила для арифметики указателей: +1
на самом деле означает «переместить адрес указателя на 1 элемент указанного типа, то есть 4 байта».
Теперь вы хотитеперейти к следующему элементу, и вы хотите использовать размер вместо числа.Почему сейчас должно быть по-другому?
Он по-прежнему работает так же, как и раньше.
Если вы добавите +8
, вы добавите 8*sizeof(long long int)
байт.Это изменит адрес на 64+size
байт, что не то, что вы, кажется, хотите.Вместо этого вы хотите добавить только 1 элемент + size
.Вот почему это +1
, а не +8