I'm analyzing Merge Sort algorithm with 100 000 elements, it was running fine with 10 000 elements. It showing me exception. Here is my code:
void Merge(int *array, int leftIndex, int middleIndex, int rightIndex) {
int *temp = (int *)calloc(rightIndex, sizeof(int));
int i = leftIndex, j = middleIndex + 1, k = 0;
while (i <= middleIndex && j <= rightIndex) {
if (array[i] < array[j]) {
temp[k++] = array[i++]; // Here it is showing me exception
} else {
temp[k++] = array[j++];
}
}
while (i <= middleIndex) {
temp[k++] = array[i++];
}
while (j <= rightIndex) {
temp[k++] = array[j++];
}
for (i = leftIndex, j = 0; i <= rightIndex; i++, j++) {
array[i] = temp[j];
}
}
void MergeSort(int *array, int leftIndex, int rightIndex) {
if (leftIndex < rightIndex) {
int middleIndex = (leftIndex + rightIndex) / 2;
MergeSort(array, leftIndex, middleIndex);
MergeSort(array, (middleIndex + 1), rightIndex);
Merge(array, leftIndex, middleIndex, rightIndex);
}
}
void main() {
for (long size = 10; size <= 100000; size *= 10) {
int *array = RandomArray(size);
MergeSort(array, 0, size - 1);
}
_getch();
}
Unhandled exception thrown: write access violation. temp was 0x1110112. occurred