全球聚焦:ExpandEnvironmentStrings函数的第二个参数的使用要注意

2022-09-17 19:03:03来源:互联网  

今天写了一个新类,然后在里面写了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(){ }


















相关阅读

精彩推荐

相关词

推荐阅读