检验监管措施清单:关于C++递归调用函数中指针声明与使用问题

来源:百度文库 编辑:高考问答 时间:2024/04/30 02:08:20
void DirectDrawWindowManager::DrawAllChildWindow(HDDWND hDDWnd)
{
if(((LPDDWND)hDDWnd)->m_lpDDChildWndLinkedList)
{
if(((LPDDWND)hDDWnd)->m_lpDDChildWndLinkedList->m_lpDDWndChainHead)
{
LPDDWNDCHAIN lpDDWndChainTemp;
lpDDWndChainTemp=((LPDDWND)hDDWnd)->m_lpDDChildWndLinkedList->m_lpDDWndChainHead;

for(;;)
{
DrawAllChildWindow(hDDWnd);

if(lpDDWndChainTemp->m_lpDDWndChainNext)
{
lpDDWndChainTemp=lpDDWndChainTemp->m_lpDDWndChainNext;
}
else
{
break;
}
}
}
}

if(((LPDDWND)hDDWnd)->m_nStyle&DDWS_SHOW)
{
SendMessage(hDDWnd,DDWM_DRAWWINDOW,NULL,NULL);
}
}

能看出问题来吗?lpDDWndChainTemp是一个类的指针,这个类的功能是实现链表上的链。问题就在于每次递归调用lpDDWndChainTemp就会改变递归之前的lpDDWndChainTemp指向。

图解:
第一次调用DrawAllChildWindow函数。
LPDDWNDCHAIN lpDDWndChainTemp被声明,声明后又进行第二次调用,lpDDWndChainTemp指向被改变,第二次调用返回到第一次调用中执行下面的语句,但这时lpDDWndChainTemp已经被第二次调用给改变了。

问题 :求大家帮个忙,有什么方法可以解决次问题,找最佳方法追加全部分数。

个人感觉,高手也很难看懂别人的代码。如果是算法的东西,还是你自己想吧。

呵呵,不好意思,不太懂啊`~~~不过偶支持你一定能解决的~~~记得有我的祝福哦~~!!!:)