GetClientRect(LPRECT lp)内的参数使用

VS2005我在MFC单文档程序里,想获取View窗体的上下左右四个坐标值,于是使用GetClientRect(LPRECTlp)来获取,可是出了问题,问题如下:LPRE... VS2005 我在MFC单文档程序里,想获取View窗体的上下左右四个坐标值,于是使用GetClientRect(LPRECT lp)来获取,可是出了问题,问题如下:
LPRECT lp; GetClientRect(lp);
long viewLength = lp->right-lp->left; long viewHeight = lp->bottom-lp->top;
首先,我看GetClientRect方法里带的参数是LPRECT lp指针,于是想当然的在前面定义了一个,编译的时候并没有报错,可是在运行的时候报错Run-Time Check Failure #3 - The variable 'lp' is being used without being defined.
CRect rc; GetClientRect(&rc);
long viewLength = rc.right-rc.left; long viewHeight = rc.bottom-rc.top;
这是后来修改用的方法 定义一个CRect rc类 把rc的地址作为GetClientRect方法的参数,这样就可以正确的运行了。
可是一直不明白 为什么不能直接用开始时定义的LPRECT lp来作为GetClientRect方法的参数呢?望知道的告诉下小弟 不胜感激
展开
 我来答
fengswd
2014-01-02 · TA获得超过333个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:179万
展开全部
LPRECT lp只是定义了一个DWORD的值,这个值你可以叫指针,也可以叫数值。但其实把这个DWORD当做地址来用时它并不是一个有效地址。这种指针又叫野指针,它不指向任何内存块。所以运行一定会错。
追问
首先,谢谢您的回答,可是像是定义一个整型、字符串之类的参数,int a,CString str;
这些不都是在定义的时候就已经给a和str分配了内存的吗?
您所说的LPRECT lp定义了一个DWORD野指针并没有指向任何一块有效的内存,这只是单单针对于LPRECT lp来说的吗,一般的定义还是会正常分配内存的?
追答
嗯。int申请一个4字节的内存块。LPRECT也是一个4字节的内存块。本质上,所有的指针其实都是一个4字节的unsigned int类型。但是指针之所以是指针是因为对该指针变量的使用是当做一个地址。必须得让它的值等于一个有效地址才行。
这样申明一个指针:
int a=0; \\4字节的int
LPRECT lp=(LPRECT)a;\\合法的指针定义
但是*lp就是要往NULL地址上读写,这样肯定是错的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式