讨论,关于多次调用ISHELL_CreateInstance()可能引起的问题。

bll218 2009-04-15 07:30:30
如下面的函数,如果在一个函数里调用ISHELL_CreateInstance()函数来进行对象的实例化与空间的分配,释放的话,在
FreeAppData()里面完成,我们知道,这个释放工作是关闭应用时BREW自己完成的。那么在应用运行期间,我多次调用SHOW_InputText(pApp),调用一次就执行了一次ISHELL_CreateInstance(),在执行第二次及以后的时候,它还会不会向内存申请空间呢?如果申请的话,新的内存与第一次申请的时候是一样的吗,或者说覆盖第一次申请的空间,如果不覆盖的话,那么多次调用会不会导致内存不足呢?
我尝试着给ISHELL_CreateInstance()加个判断,如果pApp->m_ptextobj为空的话,就执行该函数,否则不执行,这样的话,第二次调用时就没有调用ISHELL_CreateInstance(),也没有生成ITEXTCTL控件。
什么原因呢?大家指点指点。
boolean SHOW_InputText(popname* pApp)
{
ITextCtl* pITextCtl=NULL;

if(ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_TEXTCTL,
(void**)(&pApp->m_ptextobj))!=SUCCESS)
{
return FALSE;
}

pITextCtl=(ITextCtl*)pApp->m_ptextobj;

....

return TRUE;

}
...全文
1675 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen1986 2009-04-16
  • 打赏
  • 举报
回复
2楼的这个建议我尝试过,也说了的啊。“我尝试着给ISHELL_CreateInstance()加个判断,如果pApp->m_ptextobj为空的话,就执行该函数,否则不执行,这样的话,第二次调用时就没有调用ISHELL_CreateInstance(),也没有生成ITEXTCTL控件”。
  • 打赏
  • 举报
回复
那么在应用运行期间,我多次调用SHOW_InputText(pApp),调用一次就执行了一次ISHELL_CreateInstance(),在执行第二次及以后的时候,它还会不会向内存申请空间呢?
>>只增加引用计数,不重新分配内存
如果申请的话,新的内存与第一次申请的时候是一样的吗,或者说覆盖第一次申请的空间,如果不覆盖的话,那么多次调用会不会导致内存不足呢?
我尝试着给ISHELL_CreateInstance()加个判断,如果pApp->m_ptextobj为空的话,就执行该函数,否则不执行,这样的话,第二次调用时就没有调用ISHELL_CreateInstance(),也没有生成ITEXTCTL控件。
什么原因呢?大家指点指点。
建议:
boolean SHOW_InputText(popname* pApp)
{
ITextCtl* pITextCtl=NULL;
if(pApp->m_ptextobj == NULL)
{
if(ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_TEXTCTL, (void**)(&pApp->m_ptextobj))!=SUCCESS)
{
return FALSE;
}
}
pITextCtl=(ITextCtl*)pApp->m_ptextobj;

....

return TRUE;

}
zsf81 2009-04-15
  • 打赏
  • 举报
回复
当然内存泄露

2,851

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧