Il codice fa la moltiplicazione solo se gli inserisco nei numeri composta da una cifra solo per esempio 3*2, 2*2 ma non funziona con numeri di + cifre. Qualcuno può aiutarmi?

codice:
#include <stdio.h>
#include <stdlib.h>

int getlength(char *list) 
{
	int i=0;
	while(list[i]!='\0') i++;
	return i;
}

int getlength2(int *list) 
{
	int i=0;
	while(list[i]!=-1) i++;
	return i;
}

int *loadlist(char *list) 
{
	int n=getlength(list),i;
	int *num=(int *)malloc((n+1)*sizeof(int));
	char tmp;

	for(i=0; i<n; i++) 
    {
		tmp=list[i];
		num[n-1-i]=atoi(&tmp);
	}
	num[n]=-1;
	return num;
}

void print(int *res, int i) 
{
	if(res[i]!=-1) 
    {
		print(res,i+1);
		if (i!=0) printf("%d",res[i]);
		else printf("%d\n",res[i]);	
	}
}

int max(int x, int y) 
{
	if(x>=y) return x;
	else return y;
}


int *add(int *num1, int *num2) 
{
	int n=max(getlength2(num1),getlength2(num2))+1;
	int *res=(int *)malloc((n+1)*sizeof(int));
	int tmp,rest=0,i=0;

	while(num1[i]!=-1 && num2[i]!=-1) 
    {
		tmp=(num1[i]+num2[i]+rest);
		res[i]=tmp%10;
		rest=tmp/10;
		i++;
	}	
	if(num1[i]!=-1) 
    {
		 while(num1[i]!=-1) 
         {
			tmp=(num1[i]+rest);
			res[i]=tmp%10;
			rest=tmp/10;
			i++;
		}
	} else if (num2[i]!=-1) 
      {
		while(num2[i]!=-1) 
        {
			tmp=(num2[i]+rest);
			res[i]=tmp%10;
			rest=tmp/10;
			i++;
		}
	}
	if(rest!=0) res[i++]=rest;
	res[i]=-1;

	return res;
}

int main(int argc, const char *argv[]) 
{
    clock_t start, end;
	int *num1, *num2, *res;
	if(argc!=3) 
    {
		printf("Usage: add <integer 1> <integer 2>\n");
		return 1;
	}
	num1=loadlist((char *)argv[1]);
	num2=loadlist((char *)argv[2]);
	start=clock();
	res=add(num1,num2);
	end=clock();
    printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
	print(res,0);
	return 0;
}