Data Abort: coredll.dll内存泄露!!!

当我遇上-你 2009-12-10 11:00:24
我加载程序时候如下
加载模块: Controller.exe
加载模块: commctrl.dll
加载模块: oleaut32.dll
加载模块: ole32.dll
加载模块: coredll.dll
加载模块: aygshell.dll
Platform Type : PLATFORM_TYPE
Data Abort: Thread=835d5000 Proc=82026ca0 'Controller.exe'
AKY=00001001 PC=03f929ec(coredll.dll+0x000229ec) RA=50616548(???+0x50616548) BVA=1a00001b FSR=00000003


Release版本的程序在运行期间,输出窗口不断的出现
Data Abort: Thread=835d5000 Proc=82026ca0 'Controller.exe'
AKY=00001001 PC=03f929ec(coredll.dll+0x000229ec) RA=50616548(???+0x50616548) BVA=1a00001b FSR=00000003


报的coredll.dll,指针在PC=03f929ec处 ,各位怎么解决啊?
...全文
364 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
当我遇上-你 2009-12-16
  • 打赏
  • 举报
回复
xdkui,你的邮箱是多少,我把程序发给你帮我看下,帮帮我,谢谢
当我遇上-你 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xdkui 的回复:]
引用 13 楼 wswwxk 的回复:
m_pPages[i]->Create( m_IDD[i], this );
调用第一次出错,变量值为m_IDD[0]=129,但是到Create函数时候,数据是随机的
函数执行完后输出窗口出现如下代码:

Data Abort: Thread=97d8e000 Proc=8c226cb0 'Controller.exe'
AKY=00002001PC=03f82ab4(coredll.dll+0x00022ab4) RA=50616548(???+0x50616548) BVA=1c00001b FSR=00000407


可以编译debug版本的,连上debugger调试吗?在exception时断下来看看
[/Quote]
我就是编译的debug版本,断点时看到m_pPages[i]->Create( m_IDD[i], this );
传递的参数,单步执行到调用函数体,看到接收不正确啊, 要是换一种实现方法,怎么实现呢?
当我遇上-你 2009-12-15
  • 打赏
  • 举报
回复
一直F11到底,在执行 hWnd = ::CreateDialogIndirect(hInst,lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProcEx);
后出错,得到的dwError = ::GetLastError();dwError =1400 原因为:无效的窗口句柄。
应该是开始调用的时候参数没有传递出错,怎么改程序啊,大侠们!!!
当我遇上-你 2009-12-15
  • 打赏
  • 举报
回复
执行到m_pPages[i]->Create( m_IDD[i], this );
变量:- this 0x141decc0 {m_Title=0x141ded04 {...} m_IDD=0x141ded18 {...} m_pPages=0x141ded2c {...} ...} CTabSheet*
+ [CTabCtrl] 0x141decc0 {CTabCtrl*} CTabCtrl*
+ m_Title 0x141ded04 {wchar_t*[5]} wchar_t*[5]
- m_IDD 0x141ded18 {unsigned int[5]} unsigned int[5]
[0] 129 unsigned int
[1] 130 unsigned int
[2] 131 unsigned int
[3] 132 unsigned int
+ m_pPages 0x141ded2c {CDialog*[5]} CDialog*[5]
m_nNumOfPages 4 int
m_nCurrentPage 0 int
i 0 int

堆栈:> Controller.exe!CTabSheet::Show(void) 行: 76, 字节偏移量: 0x40 C++
Controller.exe!CControllerDlg::OnInitDialog(void) 行: 83, 字节偏移量: 0x1c0 C++
Controller.exe!AfxDlgProc(HWND__* hWnd = 0x7c013a00, unsigned int message = 272, unsigned int __formal = 0, long int __formal = 0) 行: 28, 字节偏移量: 0x68 C++
0xf000fffc
按F11进入函数_AFXWIN_INLINE BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd)
{ return CDialog::Create(ATL_MAKEINTRESOURCE(nIDTemplate), pParentWnd); }
此时变量的值+
this 0x0001878c {m_bFullScreen=-352321549 m_SHActivateInfo={...} m_nIDHelp=3818926227 ...} CDialog*
nIDTemplate 337505472 unsigned int
+ pParentWnd 0x0000025a {hWnd=0x00000000 ...} CWnd*
堆栈:> Controller.exe!CDialog::Create(unsigned int nIDTemplate = 337505472, CWnd* pParentWnd = 0x0000025a) 行: 700, 字节偏移量: 00 C++
Controller.exe!CTabSheet::Show(void) 行: 77, 字节偏移量: 0xac C++
Controller.exe!CControllerDlg::OnInitDialog(void) 行: 83, 字节偏移量: 0x1c0 C++
Controller.exe!AfxDlgProc(HWND__* hWnd = 0x7c013a00, unsigned int message = 272, unsigned int __formal = 0, long int __formal = 0) 行: 28, 字节偏移量: 0x68 C++
0xf000fffc
可以看到函数的参数完全不对!!!
xdkui 2009-12-15
  • 打赏
  • 举报
回复
可以断下来,还看不出来出了什么问题?

你可以把异常时的callstack, 相关变量的值,异常时的源码/汇编,所有寄存器的值都贴上来
当我遇上-你 2009-12-14
  • 打赏
  • 举报
回复
m_pPages[i]->Create( m_IDD[i], this );
调用第一次出错,变量值为m_IDD[0]=129,但是到Create函数时候,数据是随机的
函数执行完后输出窗口出现如下代码:

Data Abort: Thread=97d8e000 Proc=8c226cb0 'Controller.exe'
AKY=00002001 PC=03f82ab4(coredll.dll+0x00022ab4) RA=50616548(???+0x50616548) BVA=1c00001b FSR=00000407
Seven_zhangxw 2009-12-14
  • 打赏
  • 举报
回复
core.dll肯定不会有问题,问题肯定是自己代码造成的。
慢慢查吧,会有收获的。。。
xdkui 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wswwxk 的回复:]
m_pPages[i]->Create( m_IDD[i], this );
调用第一次出错,变量值为m_IDD[0]=129,但是到Create函数时候,数据是随机的
函数执行完后输出窗口出现如下代码:

Data Abort: Thread=97d8e000 Proc=8c226cb0 'Controller.exe'
AKY=00002001PC=03f82ab4(coredll.dll+0x00022ab4) RA=50616548(???+0x50616548) BVA=1c00001b FSR=00000407
[/Quote]

可以编译debug版本的,连上debugger调试吗?在exception时断下来看看
xdkui 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wswwxk 的回复:]
_AFXWIN_INLINE BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd)
{ return CDialog::Create(ATL_MAKEINTRESOURCE(nIDTemplate), pParentWnd); }
接收的参数不正确,导致的,怎么解决啊
/*ControllerDlg.cpp中初始化*/
m_sheet.AddPage(_T("界面1"), &m_Workpage1, IDD_DIALOG1); m_Workpage1为对话框
m_sheet.AddPage(_T("界面2"), &m_Parameter2, IDD_DIALOG2);
m_sheet.AddPage(_T("界面3"), &m_SchoolPhase3, IDD_DIALOG3);
m_sheet.AddPage(_T("界面3"), &m_Warminpage4, IDD_DIALOG4);
m_sheet.Show();

/*TabSheet.cpp*/
BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
if( MAXPAGE == m_nNumOfPages )
return FALSE;

//保存目前总的子对话框数
m_nNumOfPages++;

//记录子对话框的指针、资源ID、要在标签上显示的文字
m_pPages[m_nNumOfPages-1] = pDialog;
m_IDD[m_nNumOfPages-1] = ID;
m_Title[m_nNumOfPages-1] = title;

return TRUE;
}
void CTabSheet::Show()
{
//利用CDialog::Create来创建子对话框,并且使用CTabCtrl::InsertItem来加上相应的标签
for( int i=0; i < m_nNumOfPages; i++ )
{
m_pPages[i]->Create( m_IDD[i], this );
InsertItem( i, m_Title[i] );
}

//由于对话框显示时默认的是第一个标签被选中,所以应该让第一个子对话框显示,其他子对话框隐藏
m_pPages[0]->ShowWindow(SW_SHOW);
for( int i=1; i < m_nNumOfPages; i++)
m_pPages[i]->ShowWindow(SW_HIDE);
SetRect();

}
[/Quote]

发生异常时的callstack是什么?相关的变量的值是什么?
HeyMe 2009-12-12
  • 打赏
  • 举报
回复
有的时候是这样的,重新大便宜一遍就好了。原因好像也不好找。如果data abort在驱动或者AP还比较好查,要是在Core就有点麻烦。
宇帆 2009-12-12
  • 打赏
  • 举报
回复
data abort一般是内存泄漏

//利用CDialog::Create来创建子对话框,并且使用CTabCtrl::InsertItem来加上相应的标签
for( int i=0; i < m_nNumOfPages; i++ ) //先不要循环了 看看 第一次Create成功不?{
m_pPages[i]->Create(m_IDD[i], this);
InsertItem( i, m_Title[i] );
}
data abort这种不好查 好好精简一下你的程序 没用的先给删了
AMOROUS 2009-12-11
  • 打赏
  • 举报
回复
create后没有释放吧?
David_Hu 2009-12-11
  • 打赏
  • 举报
回复
内存泄露并不是没报就没有泄露的,代码要养成习惯,另外可以借助测试工具
当我遇上-你 2009-12-11
  • 打赏
  • 举报
回复
相同的代码在wince6 中并没有出现这种情况,接收参数也不对,但是他没有报内存泄露,不知道怎么回事了
guopeixin 2009-12-11
  • 打赏
  • 举报
回复
这个确实是不好查呀,看到用mfc搞出来的data abort我是从来没有查出来过原因,一般都换一种方法来实现
最近看论坛上有人出现的data abort是编译环境导致的,
顶了
91program 2009-12-11
  • 打赏
  • 举报
回复
一般情况下,create的东东并使用后,是需要关闭或释放的

或者,只是由于CE的内存回收机制,导致内存出现碎片,LZ可以试试疲劳测试
liuysheng 2009-12-11
  • 打赏
  • 举报
回复
我也碰到过这种情况,不过,整个工程重新全编一次,就通过了。。。关注
当我遇上-你 2009-12-11
  • 打赏
  • 举报
回复
_AFXWIN_INLINE BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd)
{ return CDialog::Create(ATL_MAKEINTRESOURCE(nIDTemplate), pParentWnd); }
接收的参数不正确,导致的,怎么解决啊
/*ControllerDlg.cpp中初始化*/
m_sheet.AddPage(_T("界面1"), &m_Workpage1, IDD_DIALOG1); m_Workpage1为对话框
m_sheet.AddPage(_T("界面2"), &m_Parameter2, IDD_DIALOG2);
m_sheet.AddPage(_T("界面3"), &m_SchoolPhase3, IDD_DIALOG3);
m_sheet.AddPage(_T("界面3"), &m_Warminpage4, IDD_DIALOG4);
m_sheet.Show();

/*TabSheet.cpp*/
BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
if( MAXPAGE == m_nNumOfPages )
return FALSE;

//保存目前总的子对话框数
m_nNumOfPages++;

//记录子对话框的指针、资源ID、要在标签上显示的文字
m_pPages[m_nNumOfPages-1] = pDialog;
m_IDD[m_nNumOfPages-1] = ID;
m_Title[m_nNumOfPages-1] = title;

return TRUE;
}
void CTabSheet::Show()
{
//利用CDialog::Create来创建子对话框,并且使用CTabCtrl::InsertItem来加上相应的标签
for( int i=0; i < m_nNumOfPages; i++ )
{
m_pPages[i]->Create( m_IDD[i], this );
InsertItem( i, m_Title[i] );
}

//由于对话框显示时默认的是第一个标签被选中,所以应该让第一个子对话框显示,其他子对话框隐藏
m_pPages[0]->ShowWindow(SW_SHOW);
for( int i=1; i < m_nNumOfPages; i++)
m_pPages[i]->ShowWindow(SW_HIDE);
SetRect();

}
当我遇上-你 2009-12-11
  • 打赏
  • 举报
回复
追踪代码发现是下面一句引起的,怎么解决啊?
//利用CDialog::Create来创建子对话框,并且使用CTabCtrl::InsertItem来加上相应的标签
for( int i=0; i < m_nNumOfPages; i++ )
{
m_pPages[i]->Create(m_IDD[i], this);
InsertItem( i, m_Title[i] );
}
kyzf 2009-12-11
  • 打赏
  • 举报
回复
友情帮顶下。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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