C语言 结构中数组的动态内存分配



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

这是多项式的头文件.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 内存。这将在程序开始时完成,但在多项式分配之后(我认为)。

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

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

您可以简单地分配它

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

你不能直接在结构声明中做到这一点,所以你要做的是这样的

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

是的,您将不得不自下而上释放内存,首先释放所有项,然后释放POLYNOMIALS数组.

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

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

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

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

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

由于您的问题被标记为家庭作业,因此我不会确切地告诉您。

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

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

如果你使用你从问题中已经知道的东西,你肯定可以看到你被要求自己直觉的东西; 您可以重写字段term,使其可以指向一个或多个TERM结构。

相关内容

  • 没有找到相关文章