Process finished with exit code -1073741571 (0xC00000FD)的解决方案
程序员文章站
2024-02-12 12:57:40
...
Process finished with exit code -1073741571 (0xC00000FD)
用clion写归并排序的时候出现了这个代码,然而代码在oj上是可以运行得到正确结果的。所以就好奇这个错误是什么原因。
网上搜了一下,错误代码对应的错误是Stack overflow,栈溢出。应该是和递归的代码有关系。看了下递归的代码:
void mergeSort(int q[], int l, int r){
if (l >= r) return;
int mid = (l + r) / 2;
mergeSort(q, l, mid);
mergeSort(q,mid + 1, r);
int left = 0;
int right = mid + 1;
int temp[N];
int k = 0;
while (left <= mid && right <= r)
if (q[left] < q[right]) temp[k++] = q[left++];
else temp[k++] = q[right++];
while (right <= r) temp[k++] = q[right++];
while (left <= mid) temp[k++] = q[left++];
for (int i = l, j = 0; i <= r; i++, j++) q[i] = temp[j];
}
中间有一句:int temp[N];
。这实际上就是错误的根源。在递归的函数中如果有占用空间比较大的数组的话,将其变为全局变量即可。
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N];
int n;
int temp[N];
void mergeSort(int q[], int l, int r){
...
}
这样就可以顺利运行了。