Why this code return segmentation fault error : Im writing these code to optimize the time of problem and it is a dp      problem 
   Given string S is .574674546476
        for index 1
     Number of even numbers from 5 to end of the string is 7 so the result         of index 1 is 7.
  for index 2
      Number of even numbers from 7 to end of the string is 7 so the result of index 2 is 7.
 for index 3
Number of even numbers from 4 to end of the string is 7 so the result of index 3 is 7.
for index 3
Number of even numbers from 6 to end of the string is 6 so the result of index 4 is 6.....
.

This is the code which ive tried but it show segmentation fault in this code

           #include<bits/stdc++.h>
         using namespace std;
           int main(){
           char str[10005];
             int i;
             cin>>str;
           int n=strlen(str);
            int arr[10005];
              for(i=0;i<n;i++){
           arr[i+1]=str[i]-48;
                 }
    
                   int tab[n+1];
    
                 if(arr[n]%2==0){
                tab[n]=1;
                    }else{
                  tab[n]=0;
                   }
    
              for(i=n-1;i>=1;i++){
               if(arr[i]%2==0){
                   tab[i]=tab[i+1]+1;
    
        
               }
                   else{
                 tab[i]=tab[i+1];
        
                       }
    
             }
               for(i=1;i<=n;i++){
               cout<<tab[i]<<" ";
            }
               }

I expect output should be 
7 7 7 6 5 5 4 4 3 2 1 1
when im giving input
574674546476 and i want to solve using dp i write the code but it show 
segmentation fault.