C++ 这段代码一直输出分段错误,我不知道为什么。有什么建议吗?

C++ 这段代码一直输出分段错误,我不知道为什么。有什么建议吗?,c++,c++11,segmentation-fault,C++,C++11,Segmentation Fault,编辑:粘贴我的全部代码。我只是有点困惑,为什么这是一个分割错误。我检查了互联网,我认为这与访问释放的地址、不正确地使用scanf或未初始化的指针无关。这是一个分段错误,因为您正在访问未分配的内存 #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; int main() { int n;

编辑:粘贴我的全部代码。我只是有点困惑,为什么这是一个分割错误。我检查了互联网,我认为这与访问释放的地址、不正确地使用scanf或未初始化的指针无关。

这是一个分段错误,因为您正在访问未分配的内存

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

int main() 
{

  int n;

  cin >> n; //currently 7

  while(n > 0)
  {

   for(int i = 0; i < n; i++)
   {

    if(i != 0)
    {
     //cout << i << "/" << n << endl;
     float test = 1.0 * i / n;
     vector<int> total(test);
     sort(total.begin(), total.end());
     cout << total[i] << endl;


    }
   }
   n--;
  }
}
从未分配,因为在行中:-

total [i]

test的值总是0,循环中的i总是小于n,因此i/n必须为零——C/C++语言将整数除法舍入为零,其他许多语言也是如此;因此,在创建向量时,不会将任何元素添加到向量中。您使用了填充构造函数。

当您使用调试器运行程序时,您看到了什么?这就是调试器的用途。如果您不知道如何使用调试器,这是一个很好的机会,可以学习如何使用调试器一次运行一行程序,监视所有变量及其值的变化,并分析程序的逻辑执行流。了解如何使用调试器是每个C++开发人员所需的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序和您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。向量声明需要在循环之前,并在循环之后排序。请缩进它,以便更容易阅读Sam在上面提出的运行调试器的建议,而不仅仅是传递注释。这是个好建议。您知道如何使用调试器吗?您可以在线使用调试器,但下载Visual Studio Community edition的副本并在本地工作要好得多。有一天,在线IDE将是一个有效的选择,但现在。。。我记得一句关于从靴子里倒尿的老话。对不起,我是个新手。这是否意味着如果我将向量改为向量,它会工作?还是说seg故障。因为如果我把它改成float,它就不会四舍五入到0,对吗?它将是一个小数点。这是否意味着如果我将向量改为向量,它将起作用?不,它不起作用。@Sphinxtheriddlemaster它不起作用的原因是您正在使用的std::vector的构造函数用数字0的测试副本填充向量,构造函数接受一个整数参数,所以当你传递一个小于零的浮点时,它会被转换成一个0的整数,然后用零项填充向量。
vector<int> total(test);