矢量超出特定机器的范围

Vector out of range on a specific machine?

本文关键字:机器 范围      更新时间:2023-10-16

我的一个程序中有一个函数,它只在特定的机器上引发错误。它在我的Windows盒子上运行良好,但当我在Linux机器上测试它时,它会抛出一个向量超出范围的错误:

----------------------------------------------
          FINDING LONGEST WORD CHAIN
----------------------------------------------
The longest chain(s) are:
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check
Abort

这就是我的日常生活:

void findLongestChain(vector<FlexArray<StringWrap>* >& chains) {
    int max;
    int maxIndex;
    vector<int> v;
    for(std::vector<int>::size_type i = 0; i != chains.size(); i++) { // iterate through vector
        int chainSize = getChainSize(chains, i);
        if(chainSize == max) { // just in case we have a tie
            v.push_back(i);
        }
        else if(chainSize > max) { // we have found a larger word chain breaking any previous ties
            max = chainSize;
            maxIndex = i;
            v.clear();
            v.push_back(i); 
        }
    }
    cout << "----------------------------------------------" << endl;
    cout << "          FINDING LONGEST WORD CHAIN          " << endl;
    cout << "----------------------------------------------" << endl;
    cout << "The longest chain(s) are: " << endl;
    for(std::vector<int>::size_type i = 0; i < v.size(); i++) {
        cout << "    Chain #" << v[i] << ": " << getWordChain( chains, v[i] ) << endl;
    }
    cout << endl;
    cout << "Each chain(s) contain " << getChainSize(chains, maxIndex) << " total words.";
}

无论如何,我以前从未见过这种情况。我想知道是否有人对不同机器上的程序错误有一些一般的提示/建议/经验,以及如何找到问题的解决方案。

以下几行可能是罪魁祸首。

int max;
int maxIndex;

变量未初始化。试着将它们初始化为合理的东西,看看事情进展如何。