C++ malloc/memcpy/free crash
C++ malloc/memcpy/free crash
我真的被这个C++错误卡住了:
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!TpWaitForAlpcComplete()(C:\Windows\system32\ntdll.dll:?)
0028D640??()(??:?)
77CB57C2 ntdll!RtlLargeIntegerDivide()(C:\Windows\system32\ntdll.dll:?)
003E1030??()(??:?)
77C92A8A ntdll!RtlCopyExtendedContext()(C:\Windows\system32\ntdll.dll:?)
()(??:?)
T是短的字节,顺便说一句,
你的指针算法错了。比方说:
T* p = new T[10];
要到达第n个元素,必须使用
T* nth = p + n;
在你的memcpy论点中,你像一样使用它
T* nth = p + sizeof(T) * n;
这有时显然是越界的。
在memcpy中,您使用的是Data+Offset*TSize,当您在int的情况下说Data+1时,这是不正确的,它实际上需要4个字节,所以在指针的情况下不必指定TSize。像这个一样修改你的memcpy代码
memcpy(Shifter, Data + Offset, TSize * (Length - Offset));
memcpy(Shifter + (Length - Offset), Data, TSize * Offset); //fails if TSize is greater than 1
memcpy(Data, Shifter, TSize * Length);
Timbo 更好地解释
相关文章:
- 尝试构建"lock-free"数据结构C++
- clCreateFromGLBuffer crash
- 调用 free() 有时会导致程序崩溃
- Valgrind 大小为 8 且地址 0x5b7e520 的读取无效,在大小为 16 的块内为 0 字节 free'd
- Protobuf ShortDebugString() crash
- 为什么 free() 函数不将内存返回给操作系统?
- Crash in boost::archive::text_iarchive in_archive {is} boost
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- free():在有效指针异常中-使用流读取巨大文件时
- OpenCV Native Android cvtColor crash
- C-Free and MySQL connect
- 为什么FREE块堆这么大
- std::free线程安全吗
- 为什么'allocate in one library and free in the other'是错误的
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 通过调用 CreateRemoteThread 来弹出 dll:crash
- 不断得到分段错误和free()无效指针
- C++ malloc/memcpy/free crash