Проблема в этой строке:
anotherptr += sizeof (WhateverType);
anotherptr
- это указатель WhateverType*
, а не Byte*
. Когда вы выполняете арифметику с типизированным указателем, общее количество байтов является четным кратным типу, который указатель объявлен как.
Итак, в приведенной выше строке вы не говорите компилятору увеличивать указатель всего на sizeof (WhateverType)
только на количество байтов, как вы ожидаете. Вы на самом деле говорите ему увеличить указатель на sizeof(WhateverType)
количество элементов или, другими словами, на sizeof(WhateverType) * sizeof(WhateverType)
количество байтов.
T *pointer = ...;
pointer += N;
Фактически эквивалентно следующему:
pointer = reinterpret_cast<T*>(reinterpret_cast<byte*>(pointer) + (sizeof(T) * N));
Даже выражение aptr[i]
работает так же, как выражение pointer[N]
- это просто синтаксический сахар для *(pointer + N)
.
Для того, что вы пытаетесь, вам нужно увеличить указатель anotherptr
на элемент N=1
, а не на N=sizeof(WhateverType)
количество элементов. Итак, используйте это вместо:
anotherptr += 1;
или проще:
anotherptr++; // or: ++anotherptr;