问题描述
- C++ 使用sort()函数 出现segmentation fault
-
#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);
}
}
时间: 2024-09-08 11:27:32