编程错误-把我从程序中带了出来

Programming error - brought me out from the program

本文关键字:程序 错误 -把 编程      更新时间:2023-10-16

我有一组段编号。这些分段属于特定对象。也就是说,一个对象有许多线段。段标签告诉哪个片段属于哪个对象。所以,现在我想根据对象标签拆分分段编号。

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

分段类是用分段的矢量定义的

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.

试试这个:

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); 
}

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

segments_per_obj内部没有任何元素。因此,当您尝试访问它的itr->Label()元素时,您的程序将崩溃。

有两种解决方案:

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

  2. 对分段使用映射而不是矢量_per_obj