VC中CString变量赋值失败的奇怪问题
我的一个类中有三个CString的成员变量,奇怪的是在这个类中对CString变量的赋值会失败,本人测试发现好像在这个类中只前涉及到内存分配的操作都会引发一个异常,大家看看是什么原因造成的!
class CMyClass
{
private:
CString strDb,strUserName,strPassword;//在构造函数或其它初始化函数中没有对这三个CString变量进行操作
public:
...
int Initialize(LPCTSTR DataBaseName, LPCTSTR pszUserName, LPCTSTR pszPassword);
...
}
int CMyClass::Initialize(LPCTSTR DataBaseName, LPCTSTR pszUserName, LPCTSTR pszPassword)
{
...
//以下第一次对三个成员变量CString操作
strDb=DataBaseName;//可以分配成功
strUserName=pszUserName;//失败,
strPassword=pszPassword;
...
}
引发错误的最终跟踪代码是atlsimpstr.h文件的ATL_NOINLINE void Fork( __in int nLength )函数
ATL_NOINLINE void Fork( __in int nLength )
{
CStringData* pOldData = GetData();
int nOldLength = pOldData->nDataLength;
CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) );
if( pNewData == NULL )//pNewData为NULL,似乎上句的内存分配失败了
{
ThrowMemoryException();//引发了内存异常
}
...
}