any ideas on how I could fix this seg fault would be great! thanks!

Code:

template <typename I>
void merge(I begin, I mid, I end, bool (*compare)(typename I::value_type &x, typename I::value_type &y)) {
int n1 = mid - begin;
int n2 = end - mid;
typedef typename I::value_type T;
T* left = new T[n1];
T* right = new T[n2];
int i;
//populate left and right arrays
i = 0;
for (I p=begin;i<n1;p++) {
left[i] = *p;
i++;
}
i = 0;
for (I p=(mid);i<n2;p++) {
right[i] = *p;
i++;
}
T* result;
i = 0;
int leftCtr = 0;
int rightCtr = 0;
//Merge the two sorted arrays
for (;i<n1+n2;i++) {
if (leftCtr<n1 && rightCtr<n2) {
if (compare(left[leftCtr],right[rightCtr])) {
result[i] = left[leftCtr++];
}
else result[i] = right[rightCtr++];
}
else if (leftCtr<n1)
result[i] = left[leftCtr++];
else
result[i] = right[rightCtr++];
}
i = 0;
//Copy the sorted array back into the original array.
for (I p=begin;p!=end;p++) {
*p = result[i++];
}
}
template<typename I>
void mergeSort(I begin, I end, bool (*compare)(typename I::value_type &x, typename I::value_type &y)) {
int len = end - begin;
if (len>1) {
I mid = begin + (len/2);
//Sort both the halves
mergeSort(begin, mid, compare);
mergeSort(mid, end, compare);
merge(begin, mid, end, compare);
}
return;
}