如何判断指针是否有效的问题。
我有一个工作线程,需要接受外部消息,消息分为两种,一种是带结构体参数的,第二种带的参数是常数,
我每次收到消息后会解析结构体,如果是第二种没有带结构体参数的消息,会崩溃。
UINT Class::Thread(LPVOID lpParam)
{
CMsgStruct ReceiveMsg; //接受到的信息 暂存,这个CMsgStruct 就是结构体
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
while(GetMessage(&msg, 0, MIN_CMD, MAX_CMD))
{
//强行转换
pReceiveMsgCache = (CleanerMsgStruct * )msg.lParam;
//这里,如果发来的消息带参数是结构体,则能解析,指针有效。否则,pReceiveMsgCache 里虽然有值,但是后续pReceiveMsgCache->iCasID 这样使用时,会崩溃。因为指针无效。
//现在的问题是,如何在这里判断一下pReceiveMsgCache或者是msg.lParam,如果有效再解析,无效的话就不解析。
//以下代码解析参数
int a = pReceiveMsgCache->iMyID ;
int b = pReceiveMsgCache->iMyNumber ;
int c = pReceiveMsgCache->iMyPos ;
}
}
问题是,在解析之前如何判断一下pReceiveMsgCache或者是msg.lParam,如果指针有效我就解析里面的值,无效的话就不解析了。
我在一开始收消息时有对消息类型进行判断,但是保险起见还是想在解析之前再判断一下,以免第一道防线做的不到位。