C-如何编写分配完整数据结构的函数



正如我在上方写的那样,我正在尝试编写一个分配数据结构的函数

这是我所做的,但是当我试图用索引调用t时,它会引发错误

typedef struct {
    float *tab;
    int nbCases;
}dyntab;
void initDyn(dyntab *dtab, int size){
    dtab=malloc(size*sizeof(dyntab));
}
int main(){
    dyntab T;
    initDyn(&T, 10); // for example allocating a table with 10 cases
}

它引发错误

订阅值既不是数组,也不是指针,也不是向量

使用vlas。

typedef struct {
    size_t nbCases;
    float tab[];
}dyntab;
dyntab *allocdyntab(dyntab *d, size_t size)
{
    dyntab *temp = realloc(d, size * sizeof(d -> tab[0]) + sizeof(*d));
    if(temp) 
    {
        temp -> nbCases = size;
    }
    return temp;
}

当您通过零时,它将分配新内存,如果没有,它将重新分配内存

int main(){
    dyntab *T = NULL;
    T = allocdyntab(T, 10); // for example allocating a table with 10 cases
    /*or*/
    //dyntab *T = allocdyntab(NULL, 10);
    /* another code */
    T = allocdyntab(T, 50); // change the size of already alllocated one without loosing the content 
    //you should add the temp variable and check the allocation result.
}

到目前为止,您也正在使用dyntab分配内存,该内存也适用于具有泄漏的本地变量。

void initDyn(dyntab *dtab, int size){
    dtab=malloc(size*sizeof(dyntab));
}

也许你想要

void initDyn(dyntab *dtab, int size){
    dtab->tab=malloc(size*sizeof(float));
    dtab->nbCases = size;
}

void initDyn(dyntab *dtab, int size){
    dtab=malloc(size*sizeof(dyntab));
}

您仅分配本地var dtab malloc 的结果分配, initdyn

malloc

请注意,最好不要在 initdyn 上效果,因为在呼叫者侧 t 是局部变量,而不是指针

如果要检索数组,则可以使用返回值:

dyntab * initDyn(int size){
    return malloc(size*sizeof(dyntab));
}
int main(){
    dyntab * T = initDyn(10); // for example allocating a table with 10 cases
}

或使用输出变量:

void initDyn(dyntab **dtab, int size){
    *dtab=malloc(size*sizeof(dyntab));
}
int main(){
    dyntab * T;
    initDyn(&T, 10); // for example allocating a table with 10 cases
}

可能您还想设置 nbcases 的元素数?

相关内容

  • 没有找到相关文章

最新更新