我很想知道如何通過函數分配數據,並且在函數返回後仍然分配數據。這既適用於基本類型(int,char **)也適用於用戶定義的類型。以下是兩段代碼。雖然在分配結束後返回,但兩者都在函數內分配。通過函數分配數據(ANSI C)
int* nCheck = NULL;
int nCount = 4;
CallIntAllocation(nCheck, nCount);
nCheck[1] = 3; // Not allocated!
...
CallIntAllocation(int* nCheck, int nCount)
{
nCheck = (int*)malloc(nCount* sizeof(int));
for (int j = 0; j < nCount; j++)
nCheck[j] = 0;
}
換作以前同樣的行爲,雖然爲用戶定義類型:
typedef struct criteriatype
{
char szCriterio[256];
char szCriterioSpecific[256];
} _CriteriaType;
typedef struct criteria
{
int nCount;
char szType[128];
_CriteriaType* CriteriaType;
} _Criteria;
...
_Criteria* Criteria;
AllocateCriteria(nTypes, nCriteria, Criteria);
...
void AllocateCriteria(int nTypes, int nCriteria[], _Criteria* Criteria)
{
int i = 0;
int j = 0;
Criteria = (_Criteria*)malloc(nTypes * sizeof(_Criteria));
for (i = 0; i < nTypes; i ++)
{
// initalise FIRST the whole structure
// OTHERWISE the allocation is gone
memset(&Criteria[i],'\0',sizeof(_Criteria));
// allocate CriteriaType
Criteria[i].CriteriaType = (_CriteriaType*)malloc(nCriteria[i] * sizeof(_CriteriaType));
// initalise them
for (j = 0; j < nCriteria[i]; j ++)
memset(&Criteria[i].CriteriaType[j],'\0',sizeof(_CriteriaType));
}
}
任何想法?我想我需要通過指針作爲參考,但我該怎麼做?
由於提前, 使用防曬回報
爲了完整起見,你可能想說說free()駐留在調用者的責任。 – dmckee 2009-06-15 12:29:28
是的,我用這種方式和工作。謝謝 – Sunscreen 2009-06-16 11:03:48