iostream-C++ 使用sort()函数 出现segmentation fault

问题描述

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

iostream-C++ 使用sort()函数 出现segmentation fault的相关文章

c-C语言输出数字团,代码为什么出现Segmentation fault,求解释并纠错??

问题描述 C语言输出数字团,代码为什么出现Segmentation fault,求解释并纠错?? //题目:输出字符串里数字团,以及个数.比如89cy129 //就输出89,129,一共2个数. 代码在这个百度知道的问题上:well,看来百度知道上面没有人会做? 跪谢!!! 源代码: include int main() { int a[80],i=0,*pa,an=0; char str[80],*pstr=str; void getnum(char pstr); gets(str); get

execute copyed function code : Segmentation fault

函数在C里面可以认为是指针, 但是又有特殊的一面. 如 调用 函数test 时, *test, test, &test 可以相互通用. 因为它们都指向同一个地址. 如 :  [root@db-172-16-3-150 zzz]# cat a.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> typedef unsigned char byt

c++-写一个简单的二叉树遇到了segmentation fault :11问题,求助

问题描述 写一个简单的二叉树遇到了segmentation fault :11问题,求助 本人小白,写了个简单的二叉树练习一下,代码如下,运行时会出现segmentation fault :11错误,求助各位大大帮忙看看是什么原因? #include <iostream> #include <fstream> using namespace std; class Node { private: int content; Node *left; Node *right; public

Linux下调试段错误的方法[Segmentation Fault]--GDB

原文 1.段错误是什么? 段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况. A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation

g++编译出的多线程程序出错“segmentation fault&quot;

 g++编译出的多线程程序出错"segmentation fault" 我使用的g++版本是g++ 4.4.3 升级到4.7版本:add-apt-repository ppa:ubuntu-toolchain-r/testapt-get updateapt-get install gcc-4.7-baseapt-get install gcc-4.7apt-get install g++-4.7 update-alternatives --install /usr/bin/gcc

linux c-请教为何会有segmentation fault错误(linux系统下c)

问题描述 请教为何会有segmentation fault错误(linux系统下c) 程序是要实现弱口令扫描的原型实现 包括能扫描两个词条连在一起的口令,大写首字母的口令和后面带数字的口令 用命令gcc -o crack -lcrypt crack.c 编译通过,但运行时出现segmentation fault,求问错在哪里? 我只改了int dict_crack(FILE *dict_fp,struct userinfo_struct userinfo); 这个函数,其他的都是书上的. #in

STL中sort函数用法简介

 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错.STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n).使用这个函数,需要包含头文件.     这个函数可以传两个参数或三个参数.第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址.也就是说,排序的区间是[a,b).简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort

qsort函数、sort函数 (精心整理篇)

先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分.   具体介绍:-^^ void qsort( void *base, size_t

JavaScript中sort函数

JavaScript中sort函数方法是返回一个元素已经进行了排序的 Array 对象. 使用方法: arrayobj.sort(sortfunction) 其中arrayObj是必选项.任意 Array 对象. sortFunction是可选项.是用来确定元素顺序的函数的名称.如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列. JavaScript中sort函数方法将 Array 对象进行适当的排序:在执行过程中并不会创建新的 Array 对象. 如果为 sortfunct