I thought I'd revise my concepts by coding some basic DS and Algos. After a great pace, I am kinda stuck now and not being able to identify my mistake. I am getting a Segmentation Fault in the below code result. Any help would be great!
#include<bits/stdc++.h>
using namespace std;
void merge(int *arr, int s, int m, int e){
    int n1 = m-s, n2 = e-m+1;
    int L[n1], R[n2];
    for(int i=0; i<n1; i++)
        L[i] = arr[s+i];
    for(int i=0; i<n2; i++)
        R[i] = arr[m+i];
    
    int p1 = 0, p2 = 0, k = s;
    while(p1<n1 && p2<n1){
        if(L[p1] <= R[p2])
            arr[k++] = L[p1++];
        else
            arr[k++] = R[p2++];
    }
    while(p1<n1)
        arr[k++] = L[p1++];
    while(p2<n2)
        arr[k++] = R[p2++];
    return;
}
void mergeSort(int *arr, int s, int e){
    if(s>=e) return;
    int m = (s+e)/2;
    mergeSort(arr, s, m-1);
    mergeSort(arr, m, e);
    merge(arr, s, m, e);
    return;
}
int main(){
    int n;
    cin>>n;
    int arr[n];
    for(int i=0; i<n; i++)
        cin>>arr[i];
    mergeSort(arr, 0, n-1);
    for(int i=0; i<n; i++)
        cout<<arr[i]<<" ";
    cout<<endl;
    return 0;
}
Thanks in advance!
 
    