我'真的堅持這個C++錯誤:C++的malloc/memcpy的/無碰撞
template<typename T>
void Shift(T* Data, const ulong& Length, long Offset) const
{
if((!Data) || (!Length))
return;
if(Offset < 0)
Offset = (Length-1) - ((-Offset-1) % Length);
else
Offset %= Length;
if(!Offset)
return;
int TSize = sizeof(T);
T* Shifter = new T[Length];
if(Shifter)
{
memcpy(Shifter, Data + TSize * Offset, TSize * (Length - Offset));
memcpy(Shifter + TSize * (Length - Offset), Data, TSize * Offset); //fails
memcpy(Data, Shifter, TSize * Length);
delete[] Shifter;
}
}
好,失敗是:
77CD0575 NTDLL TpWaitForAlpcCompletion()(C:\ Windows \ System32下\ ntdll.dll:??)
0028D640 ?? ()(?:??)!
77CB57C2 NTDLL RtlLargeIntegerDivide()(C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中:??)
003E1030? ()(?:??)!
77C92A8A NTDLL RtlCopyExtendedContext()(C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中:??)
? ?? ()(??:??)
T是短的字節,順便說一句。
解釋,如果是C++,那麼就不要使用malloc /免費,使用新/刪除 – codeling
使用'rotate'可能是更安全的。 – doctorlove
你能舉一個你如何稱呼它的例子嗎? –