Это не имеет особого смысла:
node_t* tmp = (current)+sizeof(node_t) / sizeof(node_t) + size/sizeof(int)
Арифметика указателей работает путем добавления количества элементов, а не байтов.Кажется, вы пытаетесь позаботиться об этом, разделив размеры, но это не сработает.
Из выражения, которое я предполагаю, current
имеет тип node_t*
.Добавление sizeof(node_t) / sizeof(node_t)
в основном перемещает его за текущую позицию.Вы также можете просто использовать 1
для этой части.
Затем добавьте size/sizeof(int)
.Здесь вы предполагаете другой размер элементов: int
вместо node_t
.
Вы упоминаете, что размер node_t
равен 8. Как бы вы поделили 10 на 8?10/8
равно 1 с целочисленным делением.Это означает, что вы всегда перемещаетесь на 2 элемента, то есть на 16 байтов.
Вместо этого вы можете попробовать этот уродливый хак:
node_t* tmp = (node_t *)(((char*)current) + sizeof(node_t) + size);
Это может сработать, если у вас нет очень строгих ограничений на выравниваниеаппаратное обеспечение.
В противном случае вам нужно округлить до следующего хорошо выровненного адреса.