首页 文章

结构中数组的动态内存分配,

提问于
浏览
0

我不明白如何为另一个结构中的结构数组动态分配内存 . 因为,这是我的问题...我有一个包含main的project.c文件,我有另一个polynomial.c文件,它处理所有的poly操作,比如添加术语,将多项式乘以数字等 .

这是polynomials.h的头文件

typedef struct term{
    int coeff;
    int expo;
} TERM;

typedef struct polynomial {

int size;
// This needs to be changed to calloc.. not sure how within a struct
TERM terms[20];

} POLYNOMIAL;
...
...

我还在我的project.c文件中有这个,它为poly数组动态分配内存 .

POLYNOMIAL *polynomials = (POLYNOMIAL *)malloc(sizeof(POLYNOMIAL) * 8);
// 8 being the max number of polynomials I wan to store

我在这里有两个问题,何时以及如何为术语数组动态分配内存?我想也许可以做一个指向一个指针的指针,该指针持有一个空数组的calloc内存 . 这将在程序启动时完成,但在多项式分配后(我认为) .

另一个问题,现在当我释放内存时,这应该在程序结束之前完成,然后退出并且我自由的顺序应该是自下而上的,对吧?换句话说,释放术语数组然后释放多项式数组 .

在这一点上,任何提示或指导都会有所帮助 . 谢谢!

3 回答

  • 1

    您可以简单地分配它

    TERM *terms = calloc(20, sizeof(TERM));
    

    你不能在struct声明中直接这样做,所以你要做的就是这样

    POLYNOMIAL *polynomials = calloc(size, sizeof(POLYNOMIAL));
    
    for (int i = 0; i < size; ++i)
      polynomials[i].terms = calloc(20, sizeof(TERM));
    

    是的,你必须自由地释放内存,首先释放所有条款,然后释放 POLYNOMIALS 数组 .

  • 0

    首先,您的 polynomial 结构应如下所示:

    typedef struct polynomial {
       int size;
       TERM *terms;
    } POLYNOMIAL;
    

    然后对于每个 polynomial 结构,您有:

    p.terms = calloc(size, sizeof(*terms));
    

    在释放 polynomial 结构之前,您需要释放 terms 指向的内存,否则您将无法访问 terms 成员 .

  • 0

    由于您的问题被标记为家庭作业,我不会完全告诉您 .

    TERM terms[20] 是一个文字就地数组 . 如果在函数中声明了类似的变量,它将在堆栈上为该数量的数组元素保留确切的空间 . 如果你在一个结构中做到了它,它将在结构本身内留出空间 . 因此,您被要求将 X x[n] 中的某些内容更改为等效的指针语法,该语法也用于数组语法 .

    您已经编写了 POLYNOMIAL * polynomials ,因此您知道这是(a)指向单个多项式的指针,或(b)指向多项式数组的指针,并且您可以使用 malloc 表达式对其进行初始化 .

    如果你使用你在问题中已经知道的东西,你肯定可以看到你被要求自己想要的东西;你可以用一种可以指向一个或多个 TERM 结构的方式重写字段 term .

相关问题