Je souhaiterais savoir comment je peux allouer des données via une fonction, et après que la fonction est retournée, les données sont toujours allouées. C'est à la fois pour les types de base (int, char **) et les types définis par l'utilisateur. Voici deux snipsets de code. Les deux ont l'allocation au sein de la fonction mais après le retour de l'allocation va.Affectation de données via une fonction (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;
}
Le même comportement pour qu'avant que pour le type défini par l'utilisateur:
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));
}
}
Toutes les idées? Je pense que je dois passer les pointeurs comme référence, mais comment puis-je le faire?
Merci à l'avance, antisolaires
Merci à tous, et merci jmtd. Et je pense que je peux initialiser mon Struct encore par memset: \t memset (& Criteria, 0x00, sizeof (Critères)); – Sunscreen