#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,m,k;
int set=1;
int *ptr=nullptr;
int nm;
int i;
while(cin>>n>>m>>k)
{
if(n<1||n>10||
m<1||m>100||
k<1||k>n*m)
return 0;
nm=n*m;
ptr=new int[nm];
int *traver=ptr;
i=0;
while(nm--)
{
cin>>ptr[i];
++i;
}
sort(ptr,ptr+nm);
traver=ptr;
for(int i=1;i<k;++i)
++traver;
cout<<"Scenario #"<<set<<endl;
cout<<*traver<<endl;
++set;
delete [] ptr;
}
return 0;
}
你的sort函数有问题,你前面已经经过了while(nm--)的循环,所以到了sort(ptr,ptr+nm);这句以后
nm已经是-1了
while(nm--)
nm = 0
sort(ptr,ptr+nm);
没有意义
至于为什么segmentation fault 从glibc的实现上来说是不会的 请提供更加详细的测试环境以及测试数据
template<typename _RandomAccessIterator, typename _Compare>
inline void
__sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
if (__first != __last)
{
std::__introsort_loop(__first, __last,
std::__lg(__last - __first) * 2,
__comp);
std::__final_insertion_sort(__first, __last, __comp);
}
}