今天寫了一個新類,然後在裏面寫了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()
{
}