ExpandEnvironmentStrings函數的第二個參數的使用要注意

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


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章