C++ 运行时SIGSEV错误

C++ 运行时SIGSEV错误,c++,segmentation-fault,C++,Segmentation Fault,我在执行程序时遇到SIGSEV故障。如果这些数字是按索引的递增顺序列出的,那么A组将每隔一个数字从列表中的第一个数字开始,B组将每隔一个数字从列表中的第二个数字开始。但是,将跳过每个案例第二行中指定的某些数字。然后将两组的编号打印出来 第一行包含一个整数T≤ 50表示要遵循的测试用例数。每个测试用例由两行组成。第一行包含两个满足0的数字n,m≤ M≤ N≤ 1000这里,n是我们运行到的最高数字,m是要跳过的值的数字。第二行包含1到n之间的m个不同整数的列表。这些是要跳过的数字。连续整数由一个空

我在执行程序时遇到SIGSEV故障。如果这些数字是按索引的递增顺序列出的,那么A组将每隔一个数字从列表中的第一个数字开始,B组将每隔一个数字从列表中的第二个数字开始。但是,将跳过每个案例第二行中指定的某些数字。然后将两组的编号打印出来

第一行包含一个整数T≤ 50表示要遵循的测试用例数。每个测试用例由两行组成。第一行包含两个满足0的数字n,m≤ M≤ N≤ 1000这里,n是我们运行到的最高数字,m是要跳过的值的数字。第二行包含1到n之间的m个不同整数的列表。这些是要跳过的数字。连续整数由一个空格分隔

例如:- 输入:

输出:

3 6
5
1

1 4 6
2 5 7
我的代码在这种情况下运行得非常完美,在其他情况下,它也会访问结束索引,但网站不接受解决方案,并出现指定的错误。 请注意,这里我试图解决一个实践编码站点的问题,因此缺少检查,而且我是一个初学者,所以我没有关于向量等概念的信息。 编译器是GCC14

如果您阅读了这个巨大的问题并回答了,请提前感谢

#include <iostream>
using namespace std;

int main()
{
  long cases, tasks, dones, t_done, i, k = 1;
  cin >> cases;
  for( int j = 0 ; j < cases ; j++ )
  {
    k = 1;
    cin >> tasks >> dones;
    int task[tasks] = {0} ;

    for( i = 0 ; i < dones ; i++ )
    {
        cin >> t_done ;
        task[ t_done - 1 ] = 1 ;
    }

    while(k <= tasks)
    {
        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 2;
                break ;
            }
        }
        k++;

        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 3;
                break ;
            }
        }
        k++;

    }

    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 2)
            cout << i << " ";
    }
    cout << "\n" ;
    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 3)
            cout << i << " ";
    }
    cout << "\n" ;
}
return 0 ;
}
#包括
使用名称空间std;
int main()
{
长案例,任务,完成,t_完成,i,k=1;
cin>>病例;
对于(int j=0;j>任务>>任务;
int task[tasks]={0};
对于(i=0;i>t_done;
任务[t_done-1]=1;
}

while(k)无法编译。带有初始值设定项的可变长度数组。我假设非标准扩展在5s或6s中带有GCC?替换为向量并粘贴到示例输入中。无法复制。提供回溯可能更有用(请参阅)?如果你的循环从
0
开始,而不是从
1
开始,那么你的代码将更容易阅读,因此你不必到处写
k-1
i-1
。我怀疑网站不喜欢你使用VLA
int任务[tasks]
。如果你不能使用向量,你可以简单地执行
int任务[1001;
#include <iostream>
using namespace std;

int main()
{
  long cases, tasks, dones, t_done, i, k = 1;
  cin >> cases;
  for( int j = 0 ; j < cases ; j++ )
  {
    k = 1;
    cin >> tasks >> dones;
    int task[tasks] = {0} ;

    for( i = 0 ; i < dones ; i++ )
    {
        cin >> t_done ;
        task[ t_done - 1 ] = 1 ;
    }

    while(k <= tasks)
    {
        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 2;
                break ;
            }
        }
        k++;

        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 3;
                break ;
            }
        }
        k++;

    }

    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 2)
            cout << i << " ";
    }
    cout << "\n" ;
    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 3)
            cout << i << " ";
    }
    cout << "\n" ;
}
return 0 ;
}