我不明白如何为另一个结构中的结构数组动态分配内存 . 因为,这是我的问题...我有一个包含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 回答
您可以简单地分配它
你不能在struct声明中直接这样做,所以你要做的就是这样
是的,你必须自由地释放内存,首先释放所有条款,然后释放
POLYNOMIALS
数组 .首先,您的
polynomial
结构应如下所示:然后对于每个
polynomial
结构,您有:在释放
polynomial
结构之前,您需要释放terms
指向的内存,否则您将无法访问terms
成员 .由于您的问题被标记为家庭作业,我不会完全告诉您 .
TERM terms[20]
是一个文字就地数组 . 如果在函数中声明了类似的变量,它将在堆栈上为该数量的数组元素保留确切的空间 . 如果你在一个结构中做到了它,它将在结构本身内留出空间 . 因此,您被要求将X x[n]
中的某些内容更改为等效的指针语法,该语法也用于数组语法 .您已经编写了
POLYNOMIAL * polynomials
,因此您知道这是(a)指向单个多项式的指针,或(b)指向多项式数组的指针,并且您可以使用malloc
表达式对其进行初始化 .如果你使用你在问题中已经知道的东西,你肯定可以看到你被要求自己想要的东西;你可以用一种可以指向一个或多个
TERM
结构的方式重写字段term
.