以下是本人在毕业设计(一个关于主题的搜索引擎后台程序)的过程中所遇到的一些关于内存泄漏的问题:下面这些都是内存泄漏的信息,这些*.cpp文件都是VC内部的。其中strcore.cpp(118)处的内存泄漏居然有3000多处。请问出现下面内存泄漏信息一般是由什么原因引起的?
plex.cpp(31) : {156058} normal block at 0x08D04518, 124 bytes long.
 Data: <        0`      > 00 00 00 00 00 00 00 00 30 60 D0 08 01 00 00 00 
map_pp.cpp(72) : {156057} normal block at 0x0080E668, 68 bytes long.
 Data: <PG  \G          > 50 47 D0 08 5C 47 D0 08 00 00 00 00 00 00 00 00 
strcore.cpp(118) : {156056} normal block at 0x0080BE98, 34 bytes long.
 Data: <            1   > FF FF FF FF 01 00 00 00 15 00 00 00 31 00 00 00 
dbcore.cpp(2666) : {156055} normal block at 0x08D10B68, 2 bytes long.
 Data: <  > 00 00 
strcore.cpp(118) : {156054} normal block at 0x0080C240, 270 bytes long.
 Data: <            Beiy> 01 00 00 00 08 00 00 00 01 01 00 00 42 65 69 79 

解决方案 »

  1.   

    MFC好多呢,是MFC自己的事情,我们不管他,也管不了============================================================================
    http://www.betajin.com/alphasun/index.htm
    DocWizard C++程序文档自动生成工具 | Wave OpenGL 水波与动模拟和显示 | HttpProxy | ChatSocket | Mandelbrot分形
      

  2.   

    你可能强制中止了线程。解决办法:把CString局部变量作为CWinThread派生类的成员变量。
      

  3.   

    to  hwndhwnd(何宗键) :
    确实是用boundchecker查的。to   Cline(营营) :
    该程序是多线程的,我确实是强制中止了线程。是不是如果不强制中止了线程,上面的内存泄漏就不存在了?
      

  4.   

    1。因为CString会自己分配内容,并在析构函数中释放,但你在强制中止线程时,析构函数将不会被调用。2。你可以用全局变量,或者从CWinThread派生一个类,并把你要做的工作放在重载的InitInstance()或/和Run()中。
      

  5.   

    谢谢大家,特别是 Cline(营营) 。
    还想问一个问题,我的程序在运行时,经常运行到下句时出错:
    str.Format ("Getting: %s", (LPCSTR)lParam);
    如果把(LPCSTR)lParam改为"ddddd",则不会出错,请问这可能是什么原因呢?
      

  6.   

    字符串是以'\0'结尾的, lParam指向的内容在有效范围内可能没有'\0',因此越界出错了。
      

  7.   

    其实使用vc.net的托管和值就可以轻松搞顶内存,它的好去是不用你去理会内存问题
      

  8.   

    只是你自己的问题,如果只在程序结束时产生,我认为可以不理。关键不要在运行过程中动态产生线程。另外不要把这种泄漏归根到 MFC。
      

  9.   

    对,不要把泄漏怪到MFC身上,你自己的问题会拖累MFC正常的回收内存,我自己的程序出现过很多次了,只要排除了自己的泄漏和正常退出处理的问题,那些错误自然消失。一般里面总有一行是你自己程序中的错误,那才是问题的关键,去找吧。