typedef struct
{
    HWND hwnd;
    TCHAR szFileName;
}PACA,*PPACA;
main()
{
static PACA paca;    
paca->hwnd = hWnd;
paca->szFileName = (char)FileName;
hThread = (HANDLE)CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,(LPVOID)&paca,NULL,&ThreadID);}
DWORD WINAPI Thread(LPVOID lpParam)
{
PACA *lpPaca = (PACA *)lpParam;}
这样的用法不知道有什么问题,但是运行的时候提示我内存泄漏,不知道什么原因,请各位指教,不胜感激

解决方案 »

  1.   

    paca这个是局部变量,保证生命期
    用堆上数据
      

  2.   

    线程的参数一般都是这样传的,应该没什么问题。有内存泄漏应该不是这个参的问题吧,看看其它的用了new的变量,delete了没有?
      

  3.   

    可是我把static 去掉,效果也是一样的啊,而且我也没有使用new的变量啊,纯粹的api编程
      

  4.   

    推测一下,你给这个参数赋的值hWnd、FileName会不会在这个线程还在运行的时候,就给没有了呀?比如,你的主线程比这个线程结束得早!
        paca->hwnd = hWnd;
        paca->szFileName = (char)FileName;
    不过,如果是这个问题,出的提示不应该是内存泄漏,而应该是内存不能访问,也就是0x000...5(好久没见这个提示了,忘了中间有几个0了^_^)呀????真是想不出楼主的这个问题会是个什么问题了,再帮你顶一下吧!!!
      

  5.   

    楼上的说得对, 你的主线程比线程先结束, 应该在主线程的最后用 waitforsi...(hThread),另外你的paca.szFileName 是个字符串指针吧, 应该delete.
      

  6.   

    各位,我实在hello world程序框架下面使用的,在WM_CREATE消息下面创建了一个线程createThread(),然后在线程处理函数中进行一些操作,大家说的主线程比线程先结束,主线程应该是windows main()函数啊,但是,线程没有处理完,windows主线程会提前结束么?请各位指教
      

  7.   

    会的, 如果主线程退出了, 进程就结束了, 系统会回收这个进程的句柄的, 你应该用WaitFor...系列函数, 看看MSDN还有: paca->hwnd = hWnd等; 应该是 paca.hwnd 吧?
    szFileName 也应该定义成一个指针, 初始化时用new, 或者定义成一个数组,
      

  8.   

    线程句柄没删除把?
    CloseHandle(句柄);