#include <iostream.h>
#include <windows.h>
DWORD WINAPI fun1Proc(
LPVOID lpParameter   // thread data
 ); //声明所创建线程的入口函数
int i=0;
int main()
{
//int i=0;
//定义线程的句柄
HANDLE myHan;
myHan=CreateThread(NULL,0,fun1Proc,NULL,0,NULL);//创建线程
CloseHandle(myHan);
while (i++<1000)
cout<<"main thread is running!"<<endl;


//Sleep(10);//主线程休眠10ms,让出时间片,系统会让等待运行的线程运行
return 0;
}
DWORD WINAPI fun1Proc( 
LPVOID lpParameter   // thread data
 )
{
//int i=0;
while(i++<1000)
cout<<"new thread is running!"<<endl;

return 0;//需要一个返回值
}我电脑上运行会内存泄露,咋回事?

解决方案 »

  1.   


    #include <iostream.h>
    #include <windows.h>
    DWORD WINAPI fun1Proc(
        LPVOID lpParameter   // thread data
     ); //声明所创建线程的入口函数
    int i=0;
    int main()
    {
        //int i=0;
        //定义线程的句柄
        HANDLE myHan;
        myHan=CreateThread(NULL,0,fun1Proc,NULL,0,NULL);//创建线程
    WaitForSingleObject(myHan,INFINITE);
        CloseHandle(myHan);
        while (i-->0)
            cout<<"main thread is running!"<<endl;
            
        
        //Sleep(10);//主线程休眠10ms,让出时间片,系统会让等待运行的线程运行
        return 0;
    }
    DWORD WINAPI fun1Proc( 
        LPVOID lpParameter   // thread data
     )
    {
        //int i=0;
        while(i++<1000)
            cout<<"new thread is running!"<<endl;
                
        return 0;//需要一个返回值
    }
    这样试试,线程访问同一资源最好同步..
      

  2.   

    你怎么知道?
    你又没有动态分配内存,
    还有你看你IDE的输出窗口有没有 被动由操作系统释放内存
      

  3.   

    没有用new啊,怎么会内存泄露呢
      

  4.   

    进程退出了,线程还没结束
    应该是进程WaitforSingleObject,当线程退出,进程再退出吧。
      

  5.   


    运行时出提示该内存不能为write
      

  6.   

    资源共享问题,不是内存泄漏#include <iostream>
    #include <windows.h>DWORD WINAPI fun1Proc(
      LPVOID lpParameter   // thread data
      ); //声明所创建线程的入口函数
    int i = 0;
    int main()
    {
    //int i=0;
    //定义线程的句柄
    HANDLE myHan;
    myHan = CreateThread(NULL, 0, fun1Proc, NULL, 0, NULL);//创建线程
    CloseHandle(myHan);
    while (InterlockedExchangeAdd((long *)&i, 1) < 1000)
    std::cout << "main thread is running!" << std::endl;
    //Sleep(10);//主线程休眠10ms,让出时间片,系统会让等待运行的线程运行
    return 0;
    }
    DWORD WINAPI fun1Proc( 
      LPVOID lpParameter   // thread data
      )
    {
    //int i=0;
    while(InterlockedExchangeAdd((long *)&i, 1) < 1000)
    std::cout << "new thread is running!" << std::endl; return 0;//需要一个返回值
    }
      

  7.   

    在WM_DESTROY的ondestroy()函数中将线程关闭,应该是退出的时候没有清线程
      

  8.   

    错误的原因, 不是内存有些什么东西. 是你正在访问的资源已经释放了.
    main退出后, 你认为控制台的句柄, 资源还会有可能存在么?
    既然被释放, 假如释放后, CPU的时间片才分给线程, 此时线程刚好进入printf函数, 此时这个函数访问的控制台资源已经由于main退出而释放了, 然后不能为write或read都是很正确的.
    偶尔不报错, 是你运气不错.
    报错也不是你的运气不好, 而是设计出错.
      

  9.   

    用_beginthread()代替createthread()试试。
    应该是crt的问题。
      

  10.   

    为什么用WaitForSingleObject(myHan,INFINITE);就能解决问题呢?
      

  11.   

    WaitForSingleObject(myHan,INFINITE),是等待线程退出后,当然就没有问题了,这个主要是线程没有完全退出导致的泄露