多线程运行时内存泄露

狂砍八条街 2011-04-18 09:28:40

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

我电脑上运行会内存泄露,咋回事?
...全文
348 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangwutao1987 2013-09-25
  • 打赏
  • 举报
回复
WaitForSingleObject(myHan,INFINITE),是等待线程退出后,当然就没有问题了,这个主要是线程没有完全退出导致的泄露
effortcpp 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kid_coder 的回复:]

内存泄露? 多线程访问同一个资源~ 用临界区或内核对象
[/Quote]
为什么用WaitForSingleObject(myHan,INFINITE);就能解决问题呢?
baiyizhujian 2011-05-10
  • 打赏
  • 举报
回复
用_beginthread()代替createthread()试试。
应该是crt的问题。
tt2com 2011-05-10
  • 打赏
  • 举报
回复
内存好像没泄露吧,不过同步好像有问题啊。用临界区吧
dfasri 2011-04-28
  • 打赏
  • 举报
回复
错误的原因, 不是内存有些什么东西. 是你正在访问的资源已经释放了.
main退出后, 你认为控制台的句柄, 资源还会有可能存在么?
既然被释放, 假如释放后, CPU的时间片才分给线程, 此时线程刚好进入printf函数, 此时这个函数访问的控制台资源已经由于main退出而释放了, 然后不能为write或read都是很正确的.
偶尔不报错, 是你运气不错.
报错也不是你的运气不好, 而是设计出错.
afairycell 2011-04-22
  • 打赏
  • 举报
回复
明显没有等待线程结束,直接崩溃了
jlxbc 2011-04-19
  • 打赏
  • 举报
回复
在WM_DESTROY的ondestroy()函数中将线程关闭,应该是退出的时候没有清线程
quwei197874 2011-04-19
  • 打赏
  • 举报
回复
多线程必须要同步,否则迟早要出问题.
lin152 2011-04-19
  • 打赏
  • 举报
回复
应该是线程没有正常退出造成的。
lijianli9 2011-04-19
  • 打赏
  • 举报
回复
怎么会有内存泄露呀,
可能是乱报的吧,你的线程有可能被系统认为没有正常退出。
jadyzdr 2011-04-19
  • 打赏
  • 举报
回复
没有用new啊,怎么会内存泄露呢
oldmtn 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lactoferrin 的回复:]

你怎么知道有内存泄露?
[/Quote]
你怎么知道?
你又没有动态分配内存,
还有你看你IDE的输出窗口有没有 被动由操作系统释放内存
xi52qian 2011-04-19
  • 打赏
  • 举报
回复
资源共享问题,不是内存泄漏

#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;//需要一个返回值
}
狂砍八条街 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kid_coder 的回复:]
内存泄露? 多线程访问同一个资源~ 用临界区或内核对象
[/Quote]

运行时出提示该内存不能为write
鄢老 2011-04-19
  • 打赏
  • 举报
回复
进程退出了,线程还没结束
应该是进程WaitforSingleObject,当线程退出,进程再退出吧。
Lactoferrin 2011-04-18
  • 打赏
  • 举报
回复
你怎么知道有内存泄露?
Dreadnought 2011-04-18
  • 打赏
  • 举报
回复

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


这样试试,线程访问同一资源最好同步..
KID_coder 2011-04-18
  • 打赏
  • 举报
回复
内存泄露? 多线程访问同一个资源~ 用临界区或内核对象

15,475

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧