在做"打家劫舍"时遇到的问题

#include<stdio.h>
#include<stdlib.h>
#define max(a,b) a>b?a:b
int N,*value,*cache;
int rec(int index);
int main(void){
    scanf("%d",&N);
    value=cache=(int*)malloc(sizeof(int)*(N+1));
    for (int i=1;i<=N;cache[i]=-1,i++) 
        scanf("%d",&value[i]);
    printf("%d",rec(N));
    return 0;
}

int rec(int index){
    if (index==1) return value[1];
    if (index==2) return max(value[1],value[2]);
    if (cache[index]!=-1) return cache[index];
    else return cache[index]=max(rec(index-2)+value[index],rec(index-1)); 
} 



img

输出的值总是-1,求解答!

第8行,应该是申请两块空间:
value=(int*)malloc(sizeof(int)*(N+1));
cache=(int*)malloc(sizeof(int)*(N+1));