Обычно последние ошибки являются лишь следствием более ранних, и здесь это имеет место. У вас неверное определение полинома. Это приводит к тому, что у него нет члена, называемого coeff.
Вы не можете инициализировать структуру так, как вы это делаете. Удалите вызов malloc в структуре, и вы увидите, что несколько других ошибок волшебным образом исчезнут.
И эта строка: new_polynome = new_polynome(5);
не имеет смысла. Кажется, вы пытаетесь выделить место для 5 коффов, но тогда вы совершенно не правы. Вы должны сделать так `new_polynome-> coeff = malloc (5 * sizeof (* (new_polynome-> coeff))
Также не разыгрывает malloc
Существует некоторый код, который вы должны переместить, например, распределение коэффициентов. Это должно идти внутри функции new_polynome, которую я переименовал в create_polynome.
Рабочий (и фиксированный) код:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int degree;
int *coeff; // No init here. You're just defining a type here.
} polynome;
polynome *create_polynome(int n)
{
// A polynomial of degree 0 is a constant
const int N = n+1;
// You need to set the degree
new_polynome->degree = n;
polynome *new_polynome = malloc(sizeof(*new_polynome));
new_polynome->coeff = malloc(N * sizeof(*(new_polynome->coeff)));
for(int i = 0; i < N; i++)
new_polynome->coeff[i] = 1;
return new_polynome;
}
int main(void)
{
polynome *new_polynome = create_polynome(5);
// Looping to degree makes much more sense
for(int i = 0; i < new_polynome->degree+1; i++)
printf("%d", new_polynome->coeff[i]);
free(new_polynome->coeff);
// Not necessary to free in the end, but if you want to do it,
// do it properly and free everything. One malloc for each free and
// vice versa
free(new_polynome);
// No need to return 0 since that's the default in main
}
Я также сделал несколько хороших (субъективно говоря) модификаций, таких как отсутствие пробела между разыменованием * и идентификатором. Также удалено пространство между функциями и паретезом. Кроме того, я использовал размер объекта вместо типа.
И в качестве дополнительного бонуса, функция, которая производит:
polynome *derivate_polynom(polynome *pol)
{
polynome * derivate = create_polynome(pol->degree - 1);
for(int i = 0; i < derivate->degree + 1; i++)
derivate->coeff[i] = (i+1) * pol->coeff[i+1];
return derivate;
}