清帮我看看 下面的代码关于内存的存取对否!!!
HDIB hDIB;
LPSTR m_lpDib,
int i,j,m_lWidth,m_lHeight;
m_lWidth=1000;
m_lHeight=600;
hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,*sizeof(int));
if (hDIB == 0 )
{
MessageBox("分配内存失败", "系统提示" , MB_ICONINFORMATION | MB_OK);
return NULL ;
}
m_lpDib = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
for (j=0;j<m_lHeight;j++)
for (i=0;i<m_lWidth;i++)
{
*m_lpDib=i+j;
m_lpDib+=sizeof(int);(这样用对否,若不正确 该如何应用)
}
::GlobalUnlock((HGLOBAL) hDIB);
return hDIB;
HDIB hDIB;
LPSTR m_lpDib,
int i,j,m_lWidth,m_lHeight;
m_lWidth=1000;
m_lHeight=600;
hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,*sizeof(int));
if (hDIB == 0 )
{
MessageBox("分配内存失败", "系统提示" , MB_ICONINFORMATION | MB_OK);
return NULL ;
}
m_lpDib = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
for (j=0;j<m_lHeight;j++)
for (i=0;i<m_lWidth;i++)
{
*m_lpDib=i+j;
m_lpDib+=sizeof(int);(这样用对否,若不正确 该如何应用)
}
::GlobalUnlock((HGLOBAL) hDIB);
return hDIB;
m_lpDib+=sizeof(int);(这样用对否,若不正确 该如何应用)绝对错误,编译不过吧。
定义的LPSTR m_lpDib,所以m_lpDib指向的是char*,第一句用整型为字符型赋值,错。
指针的增量,是根据指针所指的数据类型的大小决定的,对于char*型指针,增量1个单位对应1个字节,你这里凑巧了,sieof(int)是四个字节,但是由于上面一句赋值,只能对4个字节中的第一个字节有效赋值,其余三个字节是无效的。其实你的问题,只要定义:int *m_lpDib;就可以了。
在循环中:
*m_lpDib = i + j;
m_lpDib ++;