gpt4 book ai didi

c - 通过函数分配数据 (ANSI C)

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:51 25 4
gpt4 key购买 nike

我很想知道如何通过函数分配数据,并且在函数返回后仍然分配数据。这既适用于基本类型(int、char**),也适用于用户定义的类型。下面是两个代码片段。两者都在函数内进行了分配,但在返回后进行了分配。

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));


}

}

有什么想法吗?我想我需要传递指针作为引用,但我该怎么做?

提前致谢,防晒霜

最佳答案

使用回车?

Criteria *
newCriteria() {
Criteria *criteria = malloc(..);
...
return criteria;
}

/* the caller */
Criteria *c1 = newCriteria();
Criteria *c2 = newCriteria();

编辑

调用者负责调用free()

关于c - 通过函数分配数据 (ANSI C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com