This works fine on my machine but codechef shows a runtime error. Can anybody point out the problem?
#include<stdio.h>
#include<malloc.h>
#define MAX(a, b) (a > b) ? a : b;
char* tri = 0;
char rows;
int size[] = {1, 1, 2, 4, 7, 11, 16, 22, 29, 37, 46, 56, 67, 79, 92, 106, 121, 137, 154, 172, 191, 211, 232, 254, 277, 301, 326, 352, 379, 407, 436, 466, 497, 529, 562, 596, 631, 667, 704, 742, 781, 821, 862, 904, 947, 991, 1036, 1082, 1129, 1177, 1226, 1276,1327, 1379, 1432, 1486, 1541, 1597, 1654, 1712, 1771, 1831, 1892, 1954, 2017, 2081, 2146, 2212, 2279, 2347, 2416, 2486, 2557, 2629, 2702, 2776, 2851, 2927, 3004, 3082, 3161, 3241, 3322, 3404, 3487, 3571, 3656, 3742, 3829, 3917, 4006, 4096,4187, 4279, 4372, 4466, 4561, 4657, 4754, 4852, 4951, 5051, 5152};
void create(){
scanf("%d", &rows);
free(tri);
tri = malloc(size[rows+1]);
int i, j;
for(i=1; i< size[rows+1]; i++){
scanf("%d", tri+i);
}
}
void max(){
int i, j;
for(i=rows-1; i>=1; i--){
for(j = size[i]; j < size[i+1]; j++){
//printf("ppp%dppp\n", size[i] - size[i-1]+j);
tri[j] += MAX(tri[size[i] - size[i-1]+j+1], tri[size[i] - size[i-1]+j+2]);
}
//pr();printf("above printed by max");
}
}
void pr(){
int i, j;
//printf("\n--->\n");
for(i=1; i<=rows; i++){
for(j = size[i]; j < size[i+1]; j++){
printf("%d ", tri[j]);
}
printf("\n");
}
}
main(){
int n;
scanf("%d", &n);
for(;n>=1;n--){
create();
//pr();
max();
printf("%d\n", tri[1]);//pr();
}
return 0;
}