急!!!!!0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fa90 处的 std::bad_alloc。 错误怎么解决

dingdingcoding 2008-01-18 01:19:04
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc,hdcMem;
FILE *fp;
int line,colum,MoveBits,btcounts;

BYTE *ReadBits=NULL;
UINT32 **Bits=NULL;
UINT32 *tmparray=NULL;
int dzsize=18;

PBITMAPINFO lpbmi=(BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER)];
ZeroMemory(lpbmi,sizeof(BITMAPINFO));
lpbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
lpbmi->bmiHeader.biWidth=dzsize;
lpbmi->bmiHeader.biHeight=dzsize;
lpbmi->bmiHeader.biPlanes=1;
lpbmi->bmiHeader.biBitCount=32;
lpbmi->bmiHeader.biCompression=BI_RGB;
lpbmi->bmiHeader.biSizeImage =0;
lpbmi->bmiHeader.biXPelsPerMeter=GetSystemMetrics(SM_CXSCREEN);//GetDeviceCaps(hdc,HORZRES);
lpbmi->bmiHeader.biYPelsPerMeter=GetSystemMetrics(SM_CYSCREEN);//GetDeviceCaps(hdc,VERTRES);
lpbmi->bmiHeader.biClrUsed=0;
lpbmi->bmiHeader.biClrImportant=0;

switch (message)
{
case WM_PAINT :
hdc=BeginPaint(hwnd,&ps);

ReadBits=(BYTE*)malloc(sizeof(BYTE)*ceil(dzsize*dzsize/8.0));
ZeroMemory(ReadBits,ceil(dzsize*dzsize/8.0));

//二维动态数组
if(!(Bits=(UINT32**)malloc(sizeof(UINT32*)*dzsize)))
return 0;
if(!(tmparray=(UINT32*)malloc(sizeof(UINT32)*dzsize*dzsize)))
return 0;
ZeroMemory(tmparray,sizeof(UINT32)*dzsize*dzsize);
for(line=0;line<dzsize;++line)
Bits[line]=tmparray+i*dzsize*sizeof(UINT32);

。。。。。。给二维数组赋值 实际是将一个字符的点阵信息赋给这个二维数组,已验证过,二维数组里值正确

// 运行到底下这句时出错:0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fa90 处的 std::bad_alloc。

SetDIBitsToDevice(hdc,0,0,dzsize,dzsize,0,0,0,dzsize,Bits,lpbmi,DIB_RGB_COLORS);
free(ReadBits);
free(tmparray);
free(Bits);
ReadBits=NULL;
Bits=NULL;
tmparray=NULL;
EndPaint(hwnd,&ps);

return 0 ;
case WM_DESTROY:
PostQuitMessage(0);
return 0;


}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}



怎么解决啊 ?救命啦
...全文
5432 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiazaitnnd 2011-10-13
  • 打赏
  • 举报
回复
Your array requires too much contiguous memory. Your program has a bit less of 2 gigabytes of virtual memory available but that address space is broken up by chunks of code, data and various heaps. Memory is allocated from the free space between those chunks. On a 32-bit operating system you can get ~650 MB when you allocate immediately. That goes South when your program starts using memory. The sum of all memory allocations is still ~2GB.

charlee880417 2011-08-12
  • 打赏
  • 举报
回复
我也是类似的问题啊!编译出来的结果:
DrawingImage.exe 中的 0x7c812aeb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0011f714 处的 cv::Exception。
DrawingImage.exe 中的 0x7c812aeb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0011f714 处的 cv::Exception。
程序“[3516] DrawingImage.exe: 本机”已退出,返回值为 0 (0x0)。
最近学习的几个程序,编译出来都是发现内存不足的问题,请问针对这个问题有没有好的方法啊!
sharkss 2011-07-31
  • 打赏
  • 举报
回复
我也遇到这样问题,痛苦ing
ftp2312 2009-07-01
  • 打赏
  • 举报
回复
时间过的好快啊,迟到的答案:数组是不可以动态的添加元素的,此处的内存错误,显然就是数组的问题,建议C++里面还是vector较好!
wwwhaichun 2008-01-18
  • 打赏
  • 举报
回复
还真难看出来啊
不过建议将switch前的那段代码放到switch中的WM_PAINT里面去
因为太多太多太多的时候进入这个函数了,进去就申请内存
申请的内存又没有释放,严重内存泄漏哦。
从std::bad_alloc,可能是分配内存失败了。

然后就是SetDIBitsToDevice之前要不要创建一个兼容设备对象(目标设备环境)?
这个我就不清楚了,需要调查一下。
guanbenben 2008-01-18
  • 打赏
  • 举报
回复
看看这个
http://topic.csdn.net/t/20040617/20/3101592.html
guanbenben 2008-01-18
  • 打赏
  • 举报
回复
看下生成的map文件
JQ123 2008-01-18
  • 打赏
  • 举报
回复
内存不足吧
dingdingcoding 2008-01-18
  • 打赏
  • 举报
回复
我不要异常处理啊 能分析下为什么出错和错在哪里吗
lala_benben 2008-01-18
  • 打赏
  • 举报
回复
异常没处理? 你处理下啊
try {
//你的程序
}
catch(std::bad_alloc &excp) {
print("error: %s", excp.what());
}
平台 ID = 2 (NT) Service Pack = 3.0 套件 = 0x0100 产品类型 = 1 结构 = x86 [2010/06/10 15:32:32 828.3 Driver Install] #-019 正在查找硬件 ID(s): usb\vid_14cd&pid_121c&rev_0200,usb\vid_14cd&pid_121c #-018 正在查找兼容 ID(s): usb\class_08&subclass_06&prot_50,usb\class_08&subclass_06,usb\class_08 #-198 理的命令行: C:\WINDOWS\system32\services.exe #I022 在 "C:\WINDOWS\inf\usbstor.inf" 中发现了 "USB\Class_08&SubClass_06&Prot_50";设备: "USB Mass Storage Device";驱动程序: "USB Mass Storage Device";提供程序: "Microsoft";制造商: "兼容 USB 存储设备";段: "USBSTOR_BULK" #I023 实际安装部分: [USBSTOR_BULK.NT]。等级: 0x00002000。驱动程序有效日期: 07/01/2001。 #-166 设备安装函数: DIF_SELECTBESTCOMPATDRV。 #I063 从 [USBSTOR_BULK] 中的 "c:\windows\inf\usbstor.inf" 选择驱动器安装服务。 #I320 设备的类别 GUID 依旧为: {36FC9E60-C465-11CF-8056-444553540000}。 #I060 设置所选的驱动器。 #I058 选择最兼容的驱动器。 #-166 设备安装函数: DIF_INSTALLDEVICEFILES。 #I124 正在做“仅复制”安装 "USB\VID_14CD&PID_121C\812320090519"。 #-166 设备安装函数: DIF_REGISTER_COINSTALLERS。 #I056 注册了共同安装程序。 #-166 设备安装函数: DIF_INSTALLINTERFACES。 #-011 正在从 "c:\windows\inf\usbstor.inf" 安装段 [USBSTOR_BULK.NT.Interfaces]。 #I054 安装接口。 #-166 设备安装函数: DIF_INSTALLDEVICE。 #I123 进行 "USB\VID_14CD&PID_121C\812320090519" 的完整安装。 #I121 "USB\VID_14CD&PID_121C\812320090519" 的设备安装成功完成。 [2010/06/10 15:32:36 828.7 Driver Install] #-019 正在查找硬件 ID(s): usbstor\diskusb_massstorage_device______,usbstor\diskusb_massstorage_device__,usbstor\diskusb_mass,usbstor\usb_massstorage_device___,usb_massstorage_device___,usbstor\gendisk,gendisk #-018 正在查找兼容 ID(s): usbstor\disk,usbstor\raw #-198 理的命令行: C:\WINDOWS\system32\services.exe #I022 在 "C:\WINDOWS\inf\disk.inf" 中发现了 "GenDisk";设备: "磁盘驱动器";驱动程序: "磁盘驱动器";提供程序: "Microsoft";制造商: "(标准磁盘驱动器)";段: "disk_install" #I023 实际安装部分: [disk_install.NT]。等级: 0x00000006。驱动程序有效日期: 07/01/2001。 #-166 设备安装函数: DIF_SELECTBESTCOMPATDRV。 #I063 从 [disk_install] 中的 "c:\windows\inf\disk.inf" 选择驱动器安装服务。 #I320 设备的类别 GUID 依旧为: {4D36E967-E325-11CE-BFC1-08002BE10318}。 #I060 设置所选的驱动器。 #I058 选择最兼容的驱动器。 #-166 设备安装函数: DIF_INSTALLDEVICEFILES。 #I124 正在做“仅复制”安装 "USBSTOR\DISK&VEN_USB_MASS&PROD_STORAGE_DEVICE&REV__\812320090519&0"。 #-166 设备安装函数: DIF_REGISTER_COINSTALLERS。 #I056 注册了共同安装程序。 #-166 设备安装函数: DIF_INSTALLINTERFACES。 #-011 正在从 "c:\windows\inf\disk.inf" 安装段 [disk_install.NT.Interfaces]。 #I054 安装接口。 #-166 设备安装函数: DIF_INSTALLDEVICE。 #I123 进行 "USBSTOR\DISK&VEN_USB_MASS&PROD_STORAGE_DEVICE&REV__\812320090519&0" 的完整安装。 #I121 "USBSTOR\DISK&VEN_USB_MASS&PROD_STORAGE_DEVICE&REV__\812320090519&0" 的设备安装成功完成。 [2010/06/10 15:32:40 828.11 Driver Install] #-019 正在查找硬件 ID(s): storage\volume #-018 正在查找兼容 ID(s): storage\volume #-198 理的命令行: C:\WINDOWS\system32\services.exe #I022 在 "C:\WINDOWS\inf\volume.inf" 中发现了 "STORAGE\Volume";设备: "通用卷";驱动程序: "通用卷";提供程序: "Microsoft";制造商: "Microsoft";段: "volume_install" #I023 实际安装部分: [volume_install]。等级: 0x00000000。驱动程序有效日期: 07/01/2001。 #-166 设备安装函数: DIF_SELECTBESTCOMPATDRV。 #I063 从 [volume_install] 中的 "c:\windows\inf\volume.inf" 选择驱动器安装服务。 #I320 设备的类别 GUID 依旧为: {71A27CDD-812A-11D0-BEC7-08002BE2092F}。 #I060 设置所选的驱动器。 #I058 选择最兼容的驱动器。 #-166 设备安装函数: DIF_INSTALLDEVICEFILES。 #I124 正在做“仅复制”安装 "STORAGE\REMOVABLEMEDIA\7&180AA4E&0&RM"。 #-166 设备安装函数: DIF_REGISTER_COINSTALLERS。 #I056 注册了共同安装程序。 #-166 设备安装函数: DIF_INSTALLINTERFACES。 #-011 正在从 "c:\windows\inf\volume.inf" 安装段 [volume_install.Interfaces]。 #I054 安装接口。 #-166 设备安装函数: DIF_INSTALLDEVICE。 #I123 进行 "STORAGE\REMOVABLEMEDIA\7&180AA4E&0&RM" 的完整安装。 #I121 "STORAGE\REMOVABLEMEDIA\7&180AA4E&0&RM" 的设备安装成功完成。 [2010/06/10 17:12:53 2244.210] #-198 理的命令行: "C:\WINDOWS\system32\mmc.exe" C:\WINDOWS\system32\devmgmt.msc /s #I060 设置所选的驱动器。 #-019 正在查找硬件 ID(s): pci\ven_10de&dev_00e4&subsys_34011019&rev_a1,pci\ven_10de&dev_00e4&subsys_34011019,pci\ven_10de&dev_00e4&cc_0c0500,pci\ven_10de&dev_00e4&cc_0c05 #-018 正在查找兼容 ID(s): pci\ven_10de&dev_00e4&rev_a1,pci\ven_10de&dev_00e4,pci\ven_10de&cc_0c0500,pci\ven_10de&cc_0c05,pci\ven_10de,pci\cc_0c0500,pci\cc_0c05 #-166 设备安装函数: DIF_SELECTBESTCOMPATDRV。 #W059 选择最兼容的驱动器失败。 错误 0xe0000228: 这个设备没有兼容驱动程序。 #W157 默认安装程式失败。 错误 0xe0000228: 这个设备没有兼容驱动程序。 [2010/06/10 17:12:46 2244.44] #-198 理的命令行: "C:\WINDOWS\system32\mmc.exe" C:\WINDOWS\system32\devmgmt.msc /s #-166 设备安装函数: DIF_REMOVE。 #I289 正在删除设备 "PCI\VEN_10DE&DEV_00E4&SUBSYS_34011019&REV_A1\3&13C0B0C5&0&09"。 #I048 设备删除。 [2010/06/10 17:13:02 828.3 Driver Install] #-019 正在查找硬件 ID(s): pci\ven_10de&dev_00e4&subsys_34011019&rev_a1,pci\ven_10de&dev_00e4&subsys_34011019,pci\ven_10de&dev_00e4&cc_0c0500,pci\ven_10de&dev_00e4&cc_0c05 #-018 正在查找兼容 ID(s): pci\ven_10de&dev_00e4&rev_a1,pci\ven_10de&dev_00e4,pci\ven_10de&cc_0c0500,pci\ven_10de&cc_0c05,pci\ven_10de,pci\cc_0c0500,pci\cc_0c05 #-198 理的命令行: C:\WINDOWS\system32\services.exe #-166 设备安装函数: DIF_SELECTBESTCOMPATDRV。 #W059 选择最兼容的驱动器失败。 错误 0xe0000228: 这个设备没有兼容驱动程序。 #W157 默认安装程式失败。 错误 0xe0000228: 这个设备没有兼容驱动程序。 [2010/06/10 17:13:05 3180.2] #-199 执行 "C:\WINDOWS\system32\rundll32.exe",用命令行: rundll32.exe newdev.dll,ClientSideInstall \\.\pipe\PNP_Device_Install_Pipe_0.{7E82D6A6-13C1-4A49-A078-CF582F1B4A61} #I060 设置所选的驱动器。 #-019 正在查找硬件 ID(s): pci\ven_10de&dev_00e4&subsys_34011019&rev_a1,pci\ven_10d

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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