Having trouble with this. Adding, derivation, integration, all work fine, but multiplication doesn't.

My polynomial is in fact an array of pointers. Maybe redundant but that's my choice. I set the max_koef to 5 so that means that the degree of the polynomial is 5 and that the array has 6 items, p^0, p^1,..., p^5.

This is my code.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_KOEF 5;

typedef struct node
	{
		int exp;
		float koef;
		struct node *next;
	} monomial;


void MENU()
{
	printf("\n***\tPOLYNOMIAL\t***\n");
	printf("\n 1.) Add to p");
	printf("\n 2.) Add to q");	
	printf("\n 3.) Printout both");
	printf("\n 4.) Multiply");
	printf("\n 0.) EXIT");
	printf("\nChoose ---------> ");	
}

void Init(monomial *p[])
{
	int i;
	int n = MAX_KOEF;
	for (i=0; i<=n; i++) p[i] = NULL;
}


void Printout(monomial *a[], int n)
{
	int i, j, test;
	
	for (i=0; i<=n; i++)
	{
		if  (a[i] != NULL) 
		{
			if (i == 0) printf("\t%4.2f\t",a[i]->koef);
			else 
			{
				for (j=0; j<i; j++)
				{
					if (a[j] != NULL) 
					{
						test = 1;
						break;
					}
					else test = 0;
				}
				
				if (test == 1)  printf("\t+\t\t%4.2f x^%d\t",a[i]->koef, a[i]->exp);
				else printf("\t%4.2f x^%d\t",a[i]->koef, a[i]->exp);
			}	
		}
	}
	printf("\n");
}




void Insert(monomial *a[], float koef, int exp)
{
	monomial *new = malloc(sizeof(monomial));
	int e = exp;
	
	new->koef = koef;
	new->exp = exp;
	new->next = NULL;
	
	if (a[e] == NULL) a[e] = new;
	else	a[e]->koef += new->koef;
	
}



void Multiply(monomial *a[], monomial *b[], monomial *c[])
{ 
	int i, j;
	int n = MAX_KOEF;
	
	for (i=0; i<=n; i++) 
	{
		if (a[i] != NULL)
		{
			for (j=0; j<=n; j++) 
			{
				if (b[j] != NULL)
				{
					Insert(c, a[i]->koef * b[j]->koef, a[i]->exp + b[j]->exp);
				}
			}
		}
	}
	
	Printout(c, 2*n + 1);
	
} 


int main (int argc, const char * argv[]) 
{
	int n = MAX_KOEF;
	int choice, exp, test;
	float koef;
	monom *p[n+1],*q[n+1];
	monom *multi[2*n+1];
	
	Init(p); Init(q); Init(multi);
	
	do
	{
		MENU();
		scanf("%d",&choice);
		switch (choice)
		{
			case 1:
				printf("Enter koeficcient -> ");
				scanf("%f",&koef);
				do 
				{
					printf("Enter exponent -> ");
					scanf("%d",&exp);
					if (exp < 0 && exp > n) test = 0;
					else test = 1;
				} while (test != 1);	
				
				Insert(p,koef,exp);
				
				break;
			case 2:		
				printf("Enter koeficcient -> ");
				scanf("%f",&koef);
				do 
				{
					printf("Enter exponent -> ");
					scanf("%d",&exp);
					if (exp < 0 && exp > n) test = 0;
					else test = 1;
				} while (test != 1);	
				
				Insert(q,koef,exp);
				
				break;
			case 3:		
				printf("\n::::::: polynomial p :> ");
				Printout(p, n);
				printf("\n::::::: polynomial q :> ");				
				Printout(q, n);
				break;
			case 4:	
				printf("\n::::::: polynomial p * q :> ");
				Multiply(p,q,multi);
				break;

			default:
				printf("\n WRONG CHOICE");
		}
	} while (choice != 0);
	
	
	return 0;
}