今天写了一个新类,然后在里面写了ExpandEnvironmentStrings这个函数的调用,灰常高兴得把类封装好了之后,拿到外部调用的时候,在delete的时候肯定会崩溃,我单步,也看了各种数据,都正常,后来我们组长看了一眼就知道了,不亏是专家。下面我上一点代码:
class CFileAssociation
{
public:
CFileAssociation();
~CFileAssociation();
public:
TCHAR m_strDesk;
};
CFileAssociation::CFileAssociation()
{
ExpandEnvironmentStrings(TEXT("%USERPROFILE%\\Desktop"), &m_strDesk, MAX_PATH);
}
CFileAssociation::~CFileAssociation()
{
}
然后我外部调用了:
CFileAssociation *file = new CFileAssociation();
<span style="white-space:pre"> </span>...//中间没什么,不写了,商业秘密。
delete file;
结果只要delete就崩溃,很蛋疼的一件事情。
到这里大家能看出来哪里错了吗?
其实就是ExpandEnvironmentStrings第二个参数的问题,因为第二个参数必须要是类自己的内存空间,所以一般用的一定都是数组,要在类里面被释放掉,否则会遇到越界崩溃的问题。
只需要这么写即可
class CFileAssociation
{
public:
CFileAssociation();
~CFileAssociation();
public:
TCHAR m_strDesk[MAX_PATH];
};
CFileAssociation::CFileAssociation()
{
ExpandEnvironmentStrings(TEXT("%USERPROFILE%\\Desktop"), m_strDesk, MAX_PATH);
}
CFileAssociation::~CFileAssociation()
{
}