【发布时间】:2015-02-25 12:30:56
【问题描述】:
我正在尝试运行以下代码:
#include "stdafx.h"
#include <windows.h>
#include <winspool.h>
HDC GetPrinterDC (void)
{
DWORD dwNeeded, dwReturned ;
HDC hdc ;
PRINTER_INFO_4 * pinfo4 ;
EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, NULL,
0, &dwNeeded, &dwReturned) ;
pinfo4 = new PRINTER_INFO_4 [dwNeeded/sizeof(PRINTER_INFO_4)] ;
EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pinfo4,
dwNeeded, &dwNeeded, &dwReturned) ;
hdc = CreateDC (NULL, pinfo4->pPrinterName, NULL, NULL) ;
free (pinfo4) ;
return hdc ;
}
但我不断收到错误“Win32Project1.exe 已触发断点。”。当我按继续时,我最终得到错误“调试断言失败”。 错误发生在“free(pinfo4)”行。
任何帮助将不胜感激。
附加说明:也试过“delete [] pinfo4;”
附加说明:程序中断时会显示此内容。这不是我的代码: https://drive.google.com/file/d/0BwFUfWkiqC7VZkdrU04zZ3pqZUU/view?usp=sharing
【问题讨论】:
-
试试
delete [] pinfo4;而不是free -
不,仍然出现错误
-
@behnam:你真的重建了这个项目吗?错误如何变化?
-
如果 dwNeeded 不能被 sizeof(PRINTER_INFO_4) 整除会怎样?你最终会跑过分配的内存......
-
@antipattern,它在文档中哪里说 dwNeeded 需要被 sizeof(.) 整除?再看看:msdn.microsoft.com/en-us/library/windows/desktop/…。 缓冲区必须足够大以接收数据结构数组以及结构成员指向的任何字符串或其他数据。它可能在最后使用内存来存储字符串或其他信息。