读书人

求解:C++使用指针操作对象数组执行E

发布时间: 2013-10-17 17:26:17 作者: rapoo

求解:C++使用指针操作对象数组,执行EnterCriticalSection,程序卡死问题
TestDlg.cpp

CSPDAO ArrSPDao[1];
//CSPDAO* ArrSPDao;
//ArrSPDao = (CSPDAO*)malloc(sizeof(CSPDAO));

ArrSPDao[0].Start();

SPDAO.h
#include "MyLock.h"

class CSPDAO
{
private:
CMyCriticalSection m_lockRecvBuffer;
public:
void Start()
{
CMyLock oLock(m_lockRecvBuffer);
{
}
}
};

MyLock.h
class CMyCriticalSection
{
public:
CMyCriticalSection()
{
::InitializeCriticalSection(&m_cs);
}

~CMyCriticalSection()
{
::DeleteCriticalSection(&m_cs);
}

public:
void Acquire()
{
TRACE("Acquire\r\n");
::EnterCriticalSection(&m_cs);
}

void Release()
{
TRACE("Release\r\n");
::LeaveCriticalSection(&m_cs);
}

private:
CRITICAL_SECTION m_cs;
};

class CMyLock
{
public:
CMyLock(CMyCriticalSection &objMyCS) : m_objMyCS(objMyCS)
{
m_objMyCS.Acquire();
}

~CMyLock()
{
m_objMyCS.Release();
}

private:
CMyCriticalSection& m_objMyCS;
};

问题点:
使用CSPDAO ArrSPDao[1],程序正常运行
使用CSPDAO* ArrSPDao,程序执行到::EnterCriticalSection(&m_cs);卡死 c++ 指针 对象 sizeof class
[解决办法]

引用:
我需要的是对象数组,CSPDAO ArrSPDao[2];这种写法没问题,但数组长度必须是常量,所以才会考虑用指针来操作数组,下面的这种写法还是有问题
CSPDAO* ArrSPDao = new CSPDAO();
ArrSPDa[0].Start();
ArrSPDao[1].Start();
new最合适啦 new是可以动态申请的 如:CSPDAO* ArrSPDao = new CSPDAO[COUNT];

读书人网 >C++

热点推荐