有兩個問題:如何清除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