Vector 获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; }

Vector 获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; },vector,segmentation-fault,permutation,access-violation,Vector,Segmentation Fault,Permutation,Access Violation,获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; } 如果(最小!=i) { 温度=a[i]; a[i]=a[min]; a[分钟]=温度; } idx++; } 无效选择\排序(向量&a、整数大小、整数idx){ int i; 对于(i=0;i您是否尝试过使用gdb调试代码?此外,尝试将代码剥

获取某些输入的分段错误(或错误访问),程序停止
#包括
#包括
#包括
使用名称空间std;
无效步长\选择\排序(向量&a、整数大小、整数idx){
内部i、j、最小值、温度;
i=idx;
min=i;
对于(j=i+1;ja[j])
min=j;
}
如果(最小!=i)
{
温度=a[i];
a[i]=a[min];
a[分钟]=温度;
}
idx++;
}
无效选择\排序(向量&a、整数大小、整数idx){
int i;

对于(i=0;i您是否尝试过使用
gdb
调试代码?此外,尝试将代码剥离为最小的可复制示例(如所述),因为它太大,无法立即判断出问题所在。此外,请考虑在问题中添加
c++
标记。您在
main()中使用了未初始化变量
j
函数。在声明时尝试初始化它,如下所示:
int j=0;
。另一个问题--
stoi
函数是什么?它来自哪里?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void step_selection_sort(vector <int> &a, int size, int idx){
    int i,j,min,temp;
    i = idx;
    min = i;
    for (j=i+1;j<size;j++)
    {
        if (a[min]>a[j])
            min=j;
    }
    if (min!=i)
    {
        temp = a[i];
        a[i] = a[min];
        a[min] = temp;
    }
    idx++;
}
void selection_sort(vector <int> &a, int size, int idx){
    int i;
    for(i=0;i<size;i++)
    {
        step_selection_sort(a,size,idx);
    }
}
void step_desc_sort(vector <int>& a, int size, int idx){
    int i,j,max,temp;
    i = idx;
    max = i;
    for (j=i+1;j<size;j++)
    {
        if (a[max]<a[j])
            max=j;
    }
    if (max!=i)
    {
        temp = a[i];
        a[i] = a[max];
        a[max] = temp;
    }
    idx++;
}
void desc_sort(vector <int>& a, int size, int idx){
    int i;
    for(i=0;i<size;i++)
    {
        step_desc_sort(a,size,idx);
    }
}
void swap (int & a, int & b)
{
    int t = a;
    a = b;
    b = t;
}
int findCeil (vector <int>& nums, int first, int begin, int end)
{
    int ceilIndex = begin;
    for (int i = begin+1; i <= end; i++)
        if (nums[i] > first && nums[i] < nums[ceilIndex])
            ceilIndex = i;
    return ceilIndex;
}
int findBottom(vector <int>& nums,int first,int begin,int end)
{
    int bottomIndex = begin;
    for (int i = begin+1; i <= end; i++)
        if (nums[i] < first && nums[i] > nums[bottomIndex])
            bottomIndex = i;
    return bottomIndex;
}
void sortedPermutations_ASC (vector <int> nums,int num)
{
    bool isfinished=false;
    if(isfinished==false)
      for(int i=0;i<num;i++)
            cout << nums[i]; //bad access when giving inputs bigger than 8                   
    cout << endl;
    int k;
    for ( k = num - 2; k >= 0; --k )
        if (nums[k] < nums[k+1])
            break;

    if ( k == -1 )
        isfinished=true;
    else
    {
        int ceilIndex = findCeil( nums, nums[k], k + 1, num - 1 );
        swap( nums[k], nums[ceilIndex] );
        selection_sort(nums,num,k+1);
        sortedPermutations_ASC(nums,num);
    }
}
void sortedPermutations_DESC (vector <int> nums,int num)
{
    int i;
    bool isfinished=false;
    if(isfinished==false)
        for(i=0;i<num;i++)
            cout << nums[i];
    cout << endl;

    int k;
    for ( k = num - 2; k >= 0; --k )
        if (nums[k] > nums[k+1])
            break;

    if ( k == -1 )
        isfinished=true;
    else
    {
        int bottomIndex = findBottom( nums, nums[k], k + 1, num - 1 );
        swap( nums[k], nums[bottomIndex] );
        desc_sort(nums,num,k+1);
        sortedPermutations_DESC(nums,num);
    }
    return;
}

int main(){
    vector <int> nums;
    string line,temp;
    int num,j,k;
    getline(cin,line);
    while(j<line.size() && line[j]!=' ')
        j++;
    num=stoi(line.substr(0,j));
    string kind;
    j++;
    kind=line.substr(j);
    if(kind=="ASC"){
        for(k=0;k<num;k++)
            nums.push_back(k+1);
        sortedPermutations_ASC(nums,num);
    }
    if(kind=="DESC"){
        for(k=0;k<num;k++)
            nums.push_back(num-k);
        sortedPermutations_DESC(nums,num);

    }
    return 0;   
}