Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法解决分段错误_C++_Segmentation Fault_Lldb - Fatal编程技术网

C++ 无法解决分段错误

C++ 无法解决分段错误,c++,segmentation-fault,lldb,C++,Segmentation Fault,Lldb,你好,我是新手 我在运行程序时遇到分段错误,但无法找到原因。 我在谷歌上搜索过,知道这是由于内存冲突造成的,但在我的代码中找不到导致seg错误的原因 下面的代码 #include <iostream> #include<algorithm> using namespace std; int main() { int t, n, m; int arr[n]; cin >> t; while (t--) { ci

你好,我是新手 我在运行程序时遇到分段错误,但无法找到原因。 我在谷歌上搜索过,知道这是由于内存冲突造成的,但在我的代码中找不到导致seg错误的原因

下面的代码

#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
 int t, n, m;
    int  arr[n];
    cin >> t;
    while (t--)
    {
        cin >> n >> m;
        for (int i = 0; i < n; i++)
        {
            cin >> arr[i];
        }
        sort(arr, arr + n);
        int distinct = 1;
        for (int i = 1; i < n; i++)
        {
            if (arr[i] != arr[i - 1])
            {
                distinct++;
            }
        }
        if (distinct < m)
        {
            cout << "YES" << endl;
        }
        else
        {
            cout << "NO" << endl;
        }
    }

    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int t,n,m;
int-arr[n];
cin>>t;
而(t--)
{
cin>>n>>m;
对于(int i=0;i>arr[i];
}
排序(arr,arr+n);
int=1;
对于(int i=1;icout问题很可能是这两条线:

int t, n, m;
int  arr[n];
首先定义变量
n
,该变量未初始化,将具有不确定的值

然后使用不确定值
n
定义数组
arr
。在将
n
初始化为特定值之前,无法执行此操作。此处使用
n
会导致未定义的行为

第二行实际上还有另一个问题,因为它是A,C++没有真正的问题。 要解决这两个问题,您应该使用以下内容:

while (t--)
{
    int n, m;
    cin >> n >> m;
    std::vector<int> arr(n);  // Create a vector of n elements

    // ...
}
while(t--)
{
int n,m;
cin>>n>>m;
std::vector arr(n);//创建一个包含n个元素的向量
// ...
}


从更私人的角度来看,该代码似乎是为在线“竞赛”而编写的或判断网站。此类网站不是教学或学习资源,您不应将其用作学习编程语言或一般编程的方式。请参加一些课程以正确学习。

问题很可能是以下两方面:

int t, n, m;
int  arr[n];
首先定义变量
n
,该变量未初始化,将具有不确定的值

然后使用不确定值
n
定义数组
arr
。在将
n
初始化为特定值之前,无法执行此操作。此处使用
n
会导致未定义的行为

第二行实际上还有另一个问题,因为它是A,C++没有真正的问题。 要解决这两个问题,您应该使用以下内容:

while (t--)
{
    int n, m;
    cin >> n >> m;
    std::vector<int> arr(n);  // Create a vector of n elements

    // ...
}
while(t--)
{
int n,m;
cin>>n>>m;
std::vector arr(n);//创建一个包含n个元素的向量
// ...
}


从个人角度来看,该代码似乎是为在线“竞赛”或评委网站编写的。此类网站不是教学或学习资源,您不应将其用作学习编程语言或一般编程的方式。请参加一些课程以正确学习。

int arr[n];
--这里您使用非常量变量
n
指定数组的大小。这里有两个问题。首先,可变长度数组(VLA)不是标准的C++。但是更大的问题是,<代码> N< /COD>未初始化。因此,您的程序根本没有定义的行为。如果您想在运行时为顺序存储的值分配空间,请使用<代码> STD::vector < /COD>。所以基本上我必须先输入N,然后声明MA数组。是的,但我强烈推荐您。不要使用VLA,这是另一个用户发布的答案中的建议。问题是,即使您的编译器支持VLA,如果用户输入非常大的数字,您也会溢出堆栈。而且您在运行时不知道堆栈有多大。这就是为什么首选使用动态分配的原因(<代码> STD::向量<代码>是一个很好的选择)。我们看到这里有很多人从编码网站学习,他们来这里寻求建议,同时展示像你们一样的坏习惯,不知道该怎么做。没有一本关于C++的好书的替代品。;
--这里您使用非常量变量
n
指定数组的大小。这里有两个问题。首先,可变长度数组(VLA)不是标准的C++。但是更大的问题是,<代码> N< /COD>未初始化。因此,您的程序根本没有定义的行为。如果您想在运行时为顺序存储的值分配空间,请使用<代码> STD::vector < /COD>。所以基本上我必须先输入N,然后声明MA数组。是的,但我强烈推荐您。不要使用VLA,这是另一个用户发布的答案中的建议。问题是,即使您的编译器支持VLA,如果用户输入非常大的数字,您也会溢出堆栈。而且您在运行时不知道堆栈有多大。这就是为什么首选使用动态分配的原因(
std::vector
是一个不错的选择)我们看到这里有很多人从编码网站学习,他们来到这里寻求建议,同时展示像你们一样的坏习惯,不知道该怎么做。没有一本关于C++的好书的替代品。这是来自CoeCeChf的一个问题,因为严格的输入和输出问题,这已经被搞乱了。是的,这实际上是一个来自codechef的问题,由于严格的输入和输出问题,这变得一团糟。非常感谢对新BIE的帮助。