读取矢量时出现分段错误

Peg*_*gah 6 c++ stl

在c ++程序中,当我想读取大小为2697806的向量时,我总是得到Segmentation fault错误.我已经尝试了所有可能的阅读方式:

void AUROC(vector<float> v) {
   ...
   for(std::vector<int>::size_type i = 0; i != v.size(); i++)
      if (v[i]>0) ++pos; else ++neg;

   for(std::vector<long>::size_type i = 0; i != v.size(); i++)
     if (v[i]>0) ++pos; else ++neg;

   for (vector<float>::iterator i=v.begin(); i!=v.end(); ++i)
     if (*i>0) ++pos; else ++neg;

   for (long i=0;i<=v.size();i++)
     if (v[i]>0) ++pos; else ++neg;

   for(int i=0;i<=v.size();i++)
     if (v[i]>0) ++pos; else ++neg;
}

...
int main(void) { 
    vector<float> scores;
    // put data in scores;
    AUROC(scores);
}
Run Code Online (Sandbox Code Playgroud)

对于尺寸小得多的矢量,这个问题永远不会发生.

谢谢你的帮助.最好的,Pegah

mar*_*cog 1

由于它适用于较小的尺寸,因此我最好的猜测是您的堆栈空间不足。如何检查堆栈空间并更改它取决于您的操作系统:在 Linux 上运行ulimit -s以检查和ulimit -s SIZE设置。

进一步阅读:http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/

  • 因此,如果您无法使堆栈大于 3 MB,请不要在堆栈上放入 30 MB 的数据... (2认同)
  • 只需采用一个向量&lt;T&gt;&amp;,就像您一开始就应该做的那样。 (2认同)