编程错误 - 让我从程序中解脱出来

时间:2013-07-04 21:49:03

标签: c++

我有一组段号。这些细分属于 具体对象。这意味着,一个对象有许多段。分割 Label告诉哪个段属于哪个对象。所以,现在我想 将我的段号与对象标签分开。

为此我写下了一段代码。假设,我知道对象的数量(比如max)。

  

类Segments是使用Segment

的向量定义的
Segments  mysegments;
Segments::const_iterator  itr;
vector<Segments>  segments_per_obj;

segments_per_obj.resize(max);

for (itr= mysegments.begin(); itr!= mysegments.end(); itr++){          
    segments_per_obj[itr->Label()].push_back(*itr); 
 }

当我编译时,它不会给出任何错误。 但是当我运行(myprog.exe)时,它会退出我的程序并给出错误窗口告诉

myprog.exe has encountered a problem and needs to close. We are sorry for the inconvenience.
Please tell Microsoft about this problem.

2 个答案:

答案 0 :(得分:1)

试试这个:

Segments  mysegments;
Segments::const_iterator  itr;
vector<Segments>  segments_per_obj;


for (itr= mysegments.begin(); itr!= mysegments.end(); itr++)
{          
    int index = itr->Label();
    for (int i = segments_per_obj.size(); i <= index; ++i)
    {
        segments_per_obj.push_back(<create a new segment>);
    }

    segments_per_obj[index].push_back(*itr); 
}

或者按照建议使用地图,看起来更适合这种情况。

答案 1 :(得分:0)

segments_per_obj里面没有任何元素。因此,当您尝试访问它的itr-&gt; Label()元素时,您的程序将崩溃。

有两种解决方案:

  1. 将空的Segment对象添加到segments_per_obj中。您应该添加itr-&gt; Label()的最大值。

  2. 对segments_per_obj

  3. 使用地图而不是矢量