多线程进内存管理是引发的奇怪的问题~请各位高手出手帮忙!

sevenzb 2005-03-24 02:34:28
问题描述:我在一个程序中起了两个线程,只是简单的进行new和delete操作,没有共享什么东西。可是程序运行了一会儿,就报错退出了,编译器说是写入内存时发生访问冲突。很奇怪!

编译环境:vc++ .net
运行环境:windows 2000 server

源程序:
#include <stdio.h>
#include <Windows.h>
#include <memory.h>

DWORD WINAPI threadFunc1(LPVOID lpParameter)
{
printf("threadFunc1:***!!\n");
char* pTemp1;

while(1)
{
pTemp1=new char;
*pTemp1=2;
delete pTemp1;
pTemp1=NULL;
}
return 0;
}

DWORD WINAPI threadFunc2(LPVOID lpParameter)
{
printf("threadFunc2:***!!\n");
char* pTemp2;

while(1)
{
pTemp2=new char;
*pTemp2=1;
delete pTemp2;
pTemp2=NULL;
}
return 0;
}

void main()
{
unsigned long threadID1;
unsigned long threadID2;
HANDLE handle1;
HANDLE handle2;

handle1=CreateThread(NULL,0,threadFunc1,NULL,0,&threadID1);
if(handle1==NULL)
{
printf("create thread error!!\n");
getchar();
}

handle2=CreateThread(NULL,0,threadFunc2,NULL,0,&threadID2);
if(handle2==NULL)
{
printf("create thread error!!\n");
getchar();
}

while(1)
{
getchar();
Sleep(1000);
}
}
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DentistryDoctor 2005-03-24
  • 打赏
  • 举报
回复
我测试过你的代码,估计你的编译选项中的运行时库选择的是单线程的。

项目属性=>C++=>运行时库=>多线程(调试)

这样就不会了。
oyljerry 2005-03-24
  • 打赏
  • 举报
回复
两个线程中while(1)一直是死循环,没有退出...,
这样不停的在堆上分配空间,然后释放....CPU吃不消啊
应该设置一个跳出循环的条件或标志位啊
sevenzb 2005-03-24
  • 打赏
  • 举报
回复
to cut9(切瓜玩)
你最好把代码编译运行一下,因为我自己debug的时候~编译器报的错有时会不一样,但大致是这样的:

123123.exe 中的 0x77fcc8e1 处最可能的异常: 0xC0000005: 写入位置 0xdddddddd 时发生访问冲突 。
123123.exe 中的 0x77fcca14 处最可能的异常: 0xC0000005: 写入位置 0xdddddddd 时发生访问冲突 。
123123.exe 中的 0x77f8c4f2 处最可能的异常: 0xC0000005: 读取位置 0x003c093d 时发生访问冲突 。
123123.exe 中的 0x00411b00 处最可能的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突 。
123123.exe 中的 0x00411b00 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突 。

还有~我也不想把cpu烧掉啊~没办法~作并发测试的时候发现问题,跟踪原因跟踪到最后发现的是这种情况,真伤脑筋阿
cut9 2005-03-24
  • 打赏
  • 举报
回复
还有,最好别这么写啊,小心把CPU烧了。
cut9 2005-03-24
  • 打赏
  • 举报
回复
报的什么错,详细点贴生来吧。这样大家便于分析

15,471

社区成员

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

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