有两个问题:如何清除C中的结构数组,然后释放该内存?
- 如何快速清除结构数组?
- 如何释放由结构成员分配的内存?
代码:
struct sComputerNames
{
TCHAR *sName; // Using a pointer here to minimize stack memory.
};
TCHAR *sComputer = (TCHAR *) calloc(2048+1, sizeof(TCHAR));
struct sComputerNames sCN[4096] = {0};
_tcscpy(sComputer,L"PC1");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);
// What is a better way to clear out the structure array?
for (DWORD i=0;i<4096;i++)
{
free(sCN[i].sName);
sCN[i].sName=NULL;
}
// Assign a new value
_tcscpy(sComputer,L"PC2");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);
free(sCN);sCN=NULL; // Erroring here - how to free memory allocated by sCN's members?
free(sComputer);sComputer=NULL;
谢谢!
free(sCN); sCN = NULL; sCN在堆栈内存上。所以你不能释放它。你必须按照你所做的来释放mem的成员来完成循环。如果你想在一段时间后重新分配,那么最好重用相同的缓冲区。保留一个表示缓冲区“正在使用”,“空闲”或“需要分配”的标志。 – 2012-03-21 12:15:55
我认为这是为结构分配内存的正确方法 - 使用成员指针而不是为成员分配内存(即4096 * 128)? – JeffR 2012-03-21 12:49:20