BYTE* tmp = new BYTE[len]疏失,求指点

BYTE* tmp = new BYTE[len]出错,求指点!
本帖最后由 VisualEleven 于 2012-12-05 14:04:53 编辑
DWORD m_dwFileSize; //要下载的图片大小
HGLOBAL m_hGlobal;  //图片保存内存地址
BOOL GetImage(CString imgUrl); //将指定网址的图片保存到m_hGlobal所指内存,同时返回图片大小

BOOL CReadUrlImgDlg::GetImage(CString imgUrl)
{
BOOL bFlag = TRUE;

    try
    {
HINTERNET hInternet = NULL;

hInternet = InternetOpen(_T("session"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (!hInternet)
{
bFlag = FALSE;
return bFlag;
}

HINTERNET hUrl;
CHAR szHead[] = _T("Accept: */*\r\nAccept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 "
"(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)");
hUrl = InternetOpenUrl(hInternet, imgUrl, szHead, lstrlenA(szHead), 
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | \
INTERNET_FLAG_RELOAD,0);
if (!hUrl)
{
bFlag = FALSE;
//InternetCloseHandle(hInternet);
return bFlag;
}

DWORD length = 1024 * 10;
DWORD readLength = 0;
BYTE* pBuffer = NULL;
BYTE* p = NULL;
        //下载图片
        pBuffer = new BYTE[length];
        memset(pBuffer, 0, length);
        p = pBuffer;
        BOOL read = FALSE;

        do
        {
            read=InternetReadFile(hUrl, p, /*16384*/10240, &readLength);
if(!read)
{
bFlag = FALSE;
return bFlag;
}

            if(readLength==0)
                break;

if ((p-pBuffer+readLength)>=length)  //如果图片大小超过10K
            {
DWORD len = 2 * length;
                BYTE* tmp = new BYTE[len]; //一运行到这里就出错,求解
                memset(tmp,0,len);
                memcpy(tmp, pBuffer, length);
                int offset=p-pBuffer;
                //delete[] pBuffer;

                pBuffer=tmp;
delete[] tmp;
tmp = NULL;
                p=pBuffer+offset;
                length=len;
            }