함수를 통해 데이터를 할당하는 방법을 알고, 함수가 반환 된 후에도 데이터가 할당됩니다. 이것은 기본 유형 (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));
}
}
어떤 아이디어? 포인터를 참조로 전달해야한다고 생각하지만 어떻게 할 수 있습니까? 사전에
감사합니다, 선 스크린 복귀를 사용하여
감사합니다. 감사합니다. jmtd. 그리고 내가 다시 구조체를 초기화 할 수 있다고 생각합니다 memset : \t memset (& Criteria, 0x00, sizeof (Criteria)); – Sunscreen