HEAP[CIocp.exe]: Heap block at 05FA3748 modified at 05FA5750 past requested size of 2000

Willin 2005-04-10 04:06:35
HEAP[CIocp.exe]: Heap block at 05FA3748 modified at 05FA5750 past requested size of 2000
在调用HeapFree()时出现一个对话框:"User breakpoint called from code 0x77fb13b1",在output中出现了上述的文字,不知道是怎么回事.
...全文
990 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Willin 2005-04-10
  • 打赏
  • 举报
回复
代码比较长
就是在这个类里面的ClearBuf()函数里面
class BFT
{
static HANDLE m_hMem;
static CRITICAL_SECTION m_csLock;
void ClearBuf()
{
if(buf.buf)
{
EnterCriticalSection(&m_csLock);
HeapFree(m_hMem,0,buf.buf);
LeaveCriticalSection(&m_csLock);
buf.buf = NULL;
}
}
public:
WSAOVERLAPPED ol;

SOCKET sclient; //套接字

WSABUF buf; //用以发送或是接收的缓冲区的长度及其指针

int OpType; //操作种类
CRITICAL_SECTION SockCriSec; //关键段
#define OP_ACCEPT 0
#define OP_READ 1
#define OP_WRITE 2
#define OP_TRANSMIT 3
#define OP_CLOSETHREAD 4
BFT(const int len)
{
buf.len = len;
EnterCriticalSection(&m_csLock);
buf.buf = (char*)HeapAlloc(m_hMem,0,len);
LeaveCriticalSection(&m_csLock);
TRACE("Address[%8x]Len[%8x]\n",buf.buf,len);
memset(buf.buf,0,len);
InitializeCriticalSection(&SockCriSec);
memset(&ol,0,sizeof(ol));
}
BFT& ResetBuf(char *p ,int len)
{
ClearBuf();
EnterCriticalSection(&m_csLock);
buf.buf = (char*)HeapAlloc(m_hMem,0,len);
LeaveCriticalSection(&m_csLock);
memcpy(buf.buf,p,len);
buf.len = len;
return *this;
}
void *operator new(size_t size)
{
return HeapAlloc(m_hMem,0,size);
}
void operator delete(void *p)
{
HeapFree(m_hMem,0,p);
}
void RefreshOverlap()
{
memset(&ol,0,sizeof(ol) );
}
~BFT()
{
ClearBuf();
buf.len = 0;
DeleteCriticalSection(&SockCriSec);
}
static void Initial()
{
InitializeCriticalSection(&m_csLock);
m_hMem = HeapCreate(0,1000*8192,10000*8192);
}
static void UnInitial()
{
DeleteCriticalSection(&m_csLock);
HeapDestroy(m_hMem);
}
};
pcboyxhy 2005-04-10
  • 打赏
  • 举报
回复
Heap block at 05FA3748 modified at 05FA5750 past requested size of 2000


你的指针是不是修改过
或者释放之前有过某些操作
比如重复释放某一部分


完整代码看看
kobefly 2005-04-10
  • 打赏
  • 举报
回复
估计是使用的时候溢出了

导致free出错

分配空间不够,使用也不会出现问题的,只有在free的时候才会出现问题
fibbery 2005-04-10
  • 打赏
  • 举报
回复
你的程序都作了什么?分配了多少空间?
Willin 2005-04-10
  • 打赏
  • 举报
回复
我调用HeapAlloc的时候是用的HeapCreate()创建的私有堆栈,栈的大小我自己定的,是足够了的
fibbery 2005-04-10
  • 打赏
  • 举报
回复
调整堆栈空间大小,不过我也不知道怎么调整,到网上搜索一下!
Willin 2005-04-10
  • 打赏
  • 举报
回复
可是我在释放啊,又不是在分配;如果真的是堆空间不够用的话,那应该怎么样处理呢?

fibbery 2005-04-10
  • 打赏
  • 举报
回复
是不是堆空间不够用!

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧