CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

求救:为什么会内存泄漏?

楼主lens23()2004-05-02 11:11:52 在 VC/MFC / 基础类 提问

在下新手一个,我写的一个基于对话框的程序,编译都通过了,但是一运行,立刻就占用9X%的CPU,连对话框都没弹出来,后来设置断点跟踪到.../MFC/SRC/DLGCORE.cpp文件中  
  //   create   modeless   dialog  
  AfxHookWindowCreate(this);  
  --> hWnd   =   ::CreateDialogIndirect(hInst,   lpDialogTemplate,  
  pParentWnd->GetSafeHwnd(),   AfxDlgProc);  
  行时出现错误  
  弹出Debug   Library对话框  
  dlgdata.cpp  
  line   43  
  有错  
  '关闭'后下面的Debug   窗口提示如下,告诉Detect   memory   leak?这是为什么呢  
  我用的链表和节点头文件是基于Template的,回合这个有关系吗?  
   
  Loaded   'ntdll.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\kernel32.dll',   no   matching   symbolic   information   found.  
  Loaded   symbols   for   'D:\WINDOWS\system32\MFC42D.DLL'  
  Loaded   symbols   for   'D:\WINDOWS\system32\MSVCRTD.DLL'  
  Loaded   'D:\WINDOWS\system32\gdi32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\user32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\advapi32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\rpcrt4.dll',   no   matching   symbolic   information   found.  
  Loaded   symbols   for   'D:\WINDOWS\system32\MFCO42D.DLL'  
  Loaded   symbols   for   'D:\WINDOWS\system32\MFCN42D.DLL'  
  Loaded   symbols   for   'D:\WINDOWS\system32\MSVCIRTD.DLL'  
  Loaded   'D:\WINDOWS\system32\imm32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\lpk.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\usp10.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\mfc42loc.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\wsock32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\ws2_32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\msvcrt.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\ws2help.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\comctl32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\MSCTF.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\nview.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\SHLWAPI.DLL',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\shell32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\psapi.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\ole32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\powrprof.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\version.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\olepro32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\oleaut32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\ddraw.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\dciman32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\MSCTFIME.IME',   no   matching   symbolic   information   found.  
  Error:   no   data   exchange   control   with   ID   0x03ED.  
  Loaded   'D:\WINDOWS\system32\nviewimg.dll',   no   matching   symbolic   information   found.  
  Loaded   'D:\WINDOWS\system32\MSIMTF.dll',   no   matching   symbolic   information   found.  
  Detected   memory   leaks!  
  Dumping   objects   ->  
  strcore.cpp(118)   :   {63}   normal   block   at   0x00421720,   45   bytes   long.  
    Data:   <                                 >   01   00   00   00   04   00   00   00   20   00   00   00   CB   CE   CC   E5    
  {62}   normal   block   at   0x00421780,   32   bytes   long.  
    Data:   <                                 >   FF   FF   FF   FF   CD   CD   CD   CD   CD   CD   CD   CD   CD   CD   CD   CD    
  Object   dump   complete.  
  The   thread   0x11C   has   exited   with   code   3   (0x3).  
  The   program   'H:\MFC\Debug\MFC.exe'   has   exited   with   code   3   (0x3).  
  问题点数:100、回复次数:8Top

1 楼anothervip(Never ending... ...)回复于 2004-05-02 12:02:25 得分 30

没遇到过,看看句柄和指针是否有效。  
   
  你的对话框中都有什么成员?Top

2 楼subtop(南来北往)回复于 2004-05-02 13:10:17 得分 20

把代码帖出来看看啊Top

3 楼Mackz(在相互)回复于 2004-05-02 15:06:59 得分 10

代码。Top

4 楼lens23()回复于 2004-05-03 10:59:07 得分 0

 
  BOOL   CMFCDlg::OnInitDialog()  
  {  
  CDialog::OnInitDialog();  
   
  //   Add   "About..."   menu   item   to   system   menu.  
   
  //   IDM_ABOUTBOX   must   be   in   the   system   command   range.  
  ASSERT((IDM_ABOUTBOX   &   0xFFF0)   ==   IDM_ABOUTBOX);  
  ASSERT(IDM_ABOUTBOX   <   0xF000);  
   
  CMenu*   pSysMenu   =   GetSystemMenu(FALSE);  
  if   (pSysMenu   !=   NULL)  
  {  
  CString   strAboutMenu;  
  strAboutMenu.LoadString(IDS_ABOUTBOX);  
  if   (!strAboutMenu.IsEmpty())  
  {  
  pSysMenu->AppendMenu(MF_SEPARATOR);  
  pSysMenu->AppendMenu(MF_STRING,   IDM_ABOUTBOX,   strAboutMenu);  
  }  
  }  
   
  //   Set   the   icon   for   this   dialog.     The   framework   does   this   automatically  
  //     when   the   application's   main   window   is   not   a   dialog  
  SetIcon(m_hIcon,   TRUE); //   Set   big   icon  
  SetIcon(m_hIcon,   FALSE); //   Set   small   icon  
   
  //   TODO:   Add   extra   initialization   here  
  //----------------------------我加的代码--------------------------------  
  //initilize   the   variable  
  //   declare   lists   for   buy   and   sell  
  LinkedList<Deal>   *B=new   LinkedList<Deal>;  
  LinkedList<Deal>   *S=new   LinkedList<Deal>;  
  //LinkedList<Deal>   B,S;  
  Deal   *M=new   Deal;  
  Deal   *bf=new   Deal;  
  Deal   *sf=new   Deal;  
  //Deal   M,bf,sf;  
  int   i=0;  
  //   sort   the   List   when   there   is   a   new   come   in.  
  while(M->mode!='o'   &&   M->mode!='O')  
  {  
  Input(*M); //   input   information  
  if(M->mode=='B'   ||   M->mode=='b'   )    
  {  
  if   (B->currPtr==NULL)   B->InsertFront(*M);  
  else   B->InsertAfter(*M);  
  Sort(*B); //   sort   the   list   Buy  
  }  
  if(M->mode=='S'   ||   M->mode=='s'   )    
  {  
  if   (S->currPtr==NULL)   S->InsertFront(*M);  
  else   S->InsertAfter(*M);  
  Sort(*S); //   sort   the   list   Sell  
  }  
  cout<<"   input   succussfull!"<<endl;  
  //   goto   Handle(B,S)   if   neccesary  
  if   (!S->ListEmpty()   &&   !B->ListEmpty()   ) //garentee   the   top   of   the   two   lists   is   not   empty  
  {  
  bf=&(B->ListFront());  
  sf=&(S->ListFront());  
  if   (bf->money>=sf->money)   Handle(*B,*S); //   go   to   handle   the   deal  
  } //     if   level  
  } //while   level  
  delete   S,B,M,bf,sf;  
  //-----------------------------   我加的代码写完了   ------------------------------  
  return   TRUE;     //   return   TRUE     unless   you   set   the   focus   to   a   control  
  }Top

5 楼lens23()回复于 2004-05-03 11:02:46 得分 0

struct   Deal  
  {  
  char   mode; //   mode   buy   or   sell  
  float   money; //   money   accout  
  long   amount; //   dealing   amount  
  };  
   
  本来是在console下运行的,现在开始学MFC,于是拿出来练一下。  
  看来差得还很远哪Top

6 楼GameWeaverDummy(小白菜)回复于 2004-05-03 11:05:06 得分 0

帮你顶Top

7 楼Mackz(在相互)回复于 2004-05-03 14:09:15 得分 40

LinkedList<Deal>   *B=new   LinkedList<Deal>;  
  LinkedList<Deal>   *S=new   LinkedList<Deal>;  
  不知道你的这个LinkedList是什么东东,假设是一个链表模板类吧,你的程序干什么?在初始化对话框的时候做了一大堆操作,最后声明的变量全删除了,什么也不留下,就算没有错误,想得到什么结果?  
  最后,delete链表的时候,链表包含的数据能够在他的析构函数中得到释放吗?  
  那个Input()又是什么东西?Handle()又是什么东西?感觉你是把console下的代码直接移植过来,没有搞清楚Windows的运行机制。Top

8 楼lens23()回复于 2004-05-03 16:04:21 得分 0

恩,大虾们分析的对呀,呵呵,原先的还是基于过程的,没有利用消息机制做出反应是不对的。重新来过吧,多谢了。  
   
  继续努力!  
  继续努力!  
  继续努力!Top

相关问题

  • 为什么有内存泄漏
  • 为什么使用AfxBeginThread内存泄漏
  • 为什么我的程序会有内存泄漏?
  • 这样写为什么不会有内存泄漏?
  • 内存泄漏!!
  • 内存泄漏!
  • 内存泄漏!??
  • 请问,SendMessage(WM_QUIT)时,为什么有内存泄漏阿?用DestroyWindow()就没事?!
  • CWebBrowser2为什么什么都不做都有内存泄漏问题!!!
  • 这样改变控件的背景颜色为什么会有内存泄漏???????????????????

关键词

  • dll
  • mfc
  • found
  • loaded
  • no matching
  • symbolic information
  • system32
  • 对话框
  • linkedlist
  • aboutbox

得分解答快速导航

  • 帖主:lens23
  • anothervip
  • subtop
  • Mackz
  • Mackz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo