求助:VC++6.0中new的BUG问题的解决方案? new(),malloc()频繁调用后,用完就释放阿。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ说的有道理,不过这个是vc6带的dll了,现在vc.net是否还这样?ms也不会更新vc6了,如果想继续用vc6,就只有避开这个问题更何况你说的问题恐怕只会在测试程序里可能出现,当lRequest等于-1时,内存已经分配完4gb了,现在支持超过4gb内存的系统,还会用这个老掉牙的dll吗?话说回来,lRequest是long类型本身,就没法超越4gb 上午做了个测试: int nCount =0; while(1) { char* p = new char[4]; delete []p; nCount++; if(nCount == 0xffffffff) { int q = 1; } }当nCount == 0xffffffff时掉进了_heap_alloc_dbg停在了 if (lRequest == _crtBreakAlloc) _CrtDbgBreak();报错User breakpoint called from code at 0x10211920证实了这个BUG!问题是如何规避这个BUG呢? 我在2005下试试看不过,可以自己重载new运算符的啊operator new 看了LZ的测试代码(那得等多长时间啊),再去看看ms的源码,似乎是啊,找遍了debug版的代码,似乎_lRequestCurr只有增加,没有减少的地方,但是想不出解决的方法,板凳 DEBUG版本又不是让你发布的。 晕,不能因为是DEBUG版本就不管了吧,哪位大哥帮帮俺啊~~ 曾经有人给出这样的解决方案,但是个人感觉应该也不行。大家可以分析一下看看。 long lRequest; long NewCrtBreakAlloc; char* my_pointer =(char*) malloc(10); _CrtIsMemoryBlock(my_pointer, 10, &lRequest, NULL, NULL); free(my_pointer); if (lRequest > -1) NewCrtBreakAlloc = LONG_MIN / 2; else NewCrtBreakAlloc = LONG_MAX / 2; _CrtSetBreakAlloc(NewCrtBreakAlloc); VC6 MFC的文档视图,选择浏览器风格的时候,为什么提示IE4风格? 写了多年程序,现在感觉,越写越懵了~~~~ 高速数据采集 mfc 开发office 的工具栏 activex 控件时,需要继承那些接口,及步骤? 可以动态设置对话框语言属性吗? 在Console程序中调用CreateProcess怎么在新的窗口打开一个Console VC好像不是用CL编译器 急求救 谁有简单的C/S源代码啊? 困惑ing 我想用向一个程序窗口发送WM_CHAR消息(一个“回车”),怎样做?给点源码,谢谢 怎样枚举文件夹下的所有文件 求解问题第2步
int nCount =0;
while(1)
{
char* p = new char[4];
delete []p;
nCount++;
if(nCount == 0xffffffff)
{
int q = 1;
}
}
当nCount == 0xffffffff时掉进了_heap_alloc_dbg
停在了
if (lRequest == _crtBreakAlloc)
_CrtDbgBreak();
报错User breakpoint called from code at 0x10211920
证实了这个BUG!问题是如何规避这个BUG呢?
不过,可以自己重载new运算符的啊
operator new
long lRequest;
long NewCrtBreakAlloc;
char* my_pointer =(char*) malloc(10);
_CrtIsMemoryBlock(my_pointer, 10, &lRequest, NULL, NULL);
free(my_pointer);
if (lRequest > -1)
NewCrtBreakAlloc = LONG_MIN / 2;
else
NewCrtBreakAlloc = LONG_MAX / 2;
_CrtSetBreakAlloc(NewCrtBreakAlloc);