这个错误怎么解决 0xC0000005: Access Violation
以下是一个快速排序的算法实现,编译能通过,但老运行是出现这个错误机制unhandle exception in quickSort.exe :0xC0000005: Access Violation.不知道是为什么?请大家指导一下,谢谢!
下面是代码:
#include <iostream>
#include <vector>
using namespace std;
//对midNumber的实现
int midNumber(vector<int>& vec,int first ,int last)
{
int midIndex, scanF,scanL;
int pivot, temp;
//如果vector中没有元素
if (first == last)
{
return last;
}
else if(first == last-1) //如果vector中只有一个元素
{
return first;
}
midIndex = (first +last)/2;
pivot = vec[midIndex];
scanF = first;
scanL = last - 1;
//对两个子表中的元素进行分类,小于等于pivot的在左子表,
//大于pivot的在右子表
for(; ; )
{
//遍历左子表找到大于pivot的值停止
while(vec[scanF] <= pivot && scanF < midIndex)
{
scanF++;
}
//遍历右子表
while(vec[scanL] > pivot && scanL > midIndex)
{
scanL--;
}
//没有找到这样的值使
//小于等于pivot的值在左子表,
//大于pivot的值在右子表
if(scanF >= midIndex && scanL >= midIndex)
{
break;
}
//此时,vec[scanF]和vec[scanL]所在错误的子表中,应交换
temp = vec[scanF];
vec[scanF] = vec[scanL];
vec[scanL] = temp;
scanF++;
scanL--;
}//结束for循环
return midIndex;
}
//对quickSort的实现
void quickSort(vector<int>& vec,int first,int last)
{
int midIndex;
int temp;
//当vector中至多有一个元素时
if (last - first <= 1)
{
return;
}
else if (last -first == 2)
{
if(vec[first] > vec[last-1])
{
temp = vec[first];
vec[first] = vec[last-1];
vec[last-1] = temp;
}
return;
}
//
midIndex = midNumber(vec,first,last);
//递归,左子表
quickSort(vec,first,midIndex-1);
//递归,右子表
quickSort(vec,midIndex+1,last);
return;
}
int main()
{
vector<int> v;
for(int i=0; i<5; i++)
{
int ci ;
cin >> ci;
v.push_back(ci);
}
quickSort(v,1,5);
for(i=0; i<v.size(); i++)
{
cout<<v[i]<<endl;
}
return 0;
}