我不明白如何为另一个结构中的结构数组动态分配内存。就像在,这是我的问题...我有一个包含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内存。这将在程序启动时完成,但在多项式分配后(我认为)。
另一个问题,现在,当我释放内存时,应该在程序结束之前退出,并且我自由的顺序应该是自下而上的,对吧?换句话说,释放术语数组,然后释放多项式数组。
此时任何提示或指导都会有所帮助。谢谢!
答案 0 :(得分: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
数组。
答案 1 :(得分:0)
由于您的问题被标记为家庭作业,我不会完全告诉您。
TERM terms[20]
是一个文字就地数组。如果在函数中声明了类似的变量,它将在堆栈上为该数量的数组元素保留确切的空间。如果你在一个结构中做到了它,它将在结构本身内留出空间。因此,您被要求将X x[n]
中的内容更改为等效指针语法,该语法也用于数组语法。
您已经编写了POLYNOMIAL * polynomials
,因此您知道这是(a)指向单个多项式的指针,或者(b)指向多项式数组的指针,并且您可以使用{来初始化它{1}}表达。
如果你使用你在问题中已经知道的东西,肯定你可以看到你被要求自己想要的东西;您可以以可以指向一个或多个malloc
结构的方式重写字段term
。
答案 2 :(得分:0)
首先,您的polynomial
结构应如下所示:
typedef struct polynomial {
int size;
TERM *terms;
} POLYNOMIAL;
然后对于每个polynomial
结构:
p.terms = calloc(size, sizeof(*terms));
在释放terms
结构之前,您需要释放polynomial
指向的内存,否则将无法访问terms
成员。