# Merge Sort failing at deletion (Thread 1: EXC_BAD_ACCESS code 2 )

I know I should be using vectors, but I want to get better at dynamically allocating arrays. I’m not sure where I went wrong. I’m creating a new array and deleting it.

``````void Merge(int *arr,int begin, int mid, int end){

int*arrB = new int[mid - begin + 1];
int i = begin;
int j = mid+1;
int k = 0;

while(i <= mid && j <= end){
if(arr[i] <= arr[j]){
arrB[k] = arr[i];
k++;
i++;
}
else {
arrB[k] = arr[j];
k++;
j++;
}

}

while(i <= mid){
arrB[k] = arr[i];
i++;
k++;
}
while(j <= end){
arrB[k] = arr[j];
j++;
k++;
}

k = 0;
for(int i = begin; i <= end; i++){
arr[i] = arrB[k];
s.setData(arr);
k++;
}

delete[] arrB; //error here
}

``````

I’ve tried replacing <= to < for n-1, I’ve tried switching to vectors and that also gives me an error. I’ve also tried looking at similar questions.

### >Solution :

``````void Merge(int *arr, int begin, int mid, int end) {
// Allocate the arrB array on the stack instead of the heap
int arrB[mid - begin + 1];

int i = begin;
int j = mid+1;
int k = 0;

// Initialize the k variable to 0 before using it to index arrB
k = 0;

while (i <= mid && j <= end) {
if (arr[i] <= arr[j]) {
arrB[k] = arr[i];
i++;
} else {
arrB[k] = arr[j];
j++;
}

// Increment the k variable after each element is added to arrB
k++;
}

while (i <= mid) {
arrB[k] = arr[i];
i++;
k++;
}
while (j <= end) {
arrB[k] = arr[j];
j++;
k++;
}

// Call the setData method once, outside of the for loop
s.setData(arr);

k = 0;
for (int i = begin; i <= end; i++) {
arr[i] = arrB[k];
k++;
}
}
``````