首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

多线程运行时内存储器泄露

2013-09-28 
多线程运行时内存泄露#include iostream.h#include windows.hDWORD WINAPI fun1Proc(LPVOID lpParamet

多线程运行时内存泄露


#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;//需要一个返回值
}

我电脑上运行会内存泄露,咋回事?
[解决办法]

#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;//需要一个返回值
}


这样试试,线程访问同一资源最好同步..
[解决办法]
引用:
你怎么知道有内存泄露?

你怎么知道?
你又没有动态分配内存,
还有你看你IDE的输出窗口有没有 被动由操作系统释放内存
[解决办法]
资源共享问题,不是内存泄漏

#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;//需要一个返回值
}

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

热点排行