【发布时间】:2019-07-03 10:51:20
【问题描述】:
试图找出释放内存的正确方法,但我找不到明确的答案。我确定它就在那里,但我似乎找不到它,我有点困惑。
这就是我正在做的事情。我从 sUsers 创建一个新的 sStructUsers,然后为用户名分配内存
struct sStructUsers
{
TCHAR *sName;
};
sStructUsers *sUsers = new sStructUsers[TOTALUSERS]();
// Allocate memory for the TCHARs in sStruct
for (INT k = 0; k < TOTALUSERS; k++)
{
sUsers [k].sName = (TCHAR*)calloc(128,sizeof(TCHAR))
}
接下来,我对 sName 成员做任何我需要做的工作
// do work here
现在,要清理,我要这样做吗:
delete[] sUsers;
还是我这样做?
for (INT k = 0; k < TOTALUSERS; k++)
{
free(sUsers[k].sName);
}
delete[] sUsers?
我不确定是否需要释放内存或者 delete[] 是否会处理它?
【问题讨论】:
-
不要将 -
alloc()函数与new结合使用。 -
除了 TCHAR sName[128] 之外,我还必须以某种方式为 sName 分配内存。那会吃掉堆栈。
-
new TCHAR[128]有什么问题? -
两个分配都需要
deallocated。仅在sUsers上调用delete[ ]也不会释放为名称分配的内存。为什么不改用std::string或std::unique_ptr?为什么要通过手动内存管理使您的生活复杂化。 -
sStructUsers *sUsers = new sStructUsers[TOTALUSERS]();-- 你正在使用 C++。为什么不是:std::vector<sStructUsers> sUsers(TOTALUSERS);?然后TCHAR *sName;-- 你正在使用 C++。为什么不是:std::basic_string<TCHAR> sName;?或者std::wstring sName;,如果这是一个 Unicode 应用程序并且您不再需要使用TCHAR。与新手和非 C++ 程序员的普遍看法相反,到处使用指针和动态内存并不会使 C++ 应用看起来“专业”或“出色”。
标签: c++ arrays struct delete-operator