是vc6库的问题么?高分特请高人解答.
一个很简单的程序,在VC6下编译运行报错(内存错误,看了下是delete p;的问题),但不知道为什么,拷贝其到VS2005下编译运行,好像不会报错了,请问高人,是vc6库的问题,还是我的代码的问题,高分相送!!!
全部代码如下:
#include <windows.h>
#include <queue>
using namespace std;
struct MYMSG
{
long m;
};
HANDLE g_hLockEvent = NULL;
std::queue<MYMSG *> g_queue;
void Lock()
{
WaitForSingleObject(g_hLockEvent, INFINITE);
}
void Unlock()
{
SetEvent(g_hLockEvent);
}
MYMSG *PopMsg()
{
MYMSG *p = NULL;
Lock();
if (!g_queue.empty())
{
p = g_queue.front();
g_queue.pop();
}
Unlock();
return p;
}
void PushMsg(MYMSG *p)
{
if (p == NULL)
return;
Lock();
g_queue.push(p);
Unlock();
}
DWORD WINAPI Thread1(LPVOID param)
{
while (true)
{
MYMSG *p = new MYMSG;
PushMsg(p);
}
return 0;
}
DWORD WINAPI Thread2(LPVOID param)
{
while (true)
{
MYMSG *p = PopMsg();
if (p != NULL)
delete p;
}
return 0;
}
void main()
{
g_hLockEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
CreateThread(NULL, 0, Thread1, NULL, 0, NULL);
CreateThread(NULL, 0, Thread2, NULL, 0, NULL);
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
WaitForSingleObject(hEvent, INFINITE);
}