使用stringstream进行分段错误(核心转储)

时间:2013-09-19 13:15:33

标签: c++ segmentation-fault stringstream

当我尝试使用cout从打印切换到命令行以使用stringstream和streamstring.str()将其设置为字符串时,我遇到了这个问题。我的代码如下:

string Similarity::maxJaccard(){
    double currentJaccardValue(0.0);
    double maxJaccardValue(0.0);
    int index1(0);
    int index2(0);
    double jaccardNumerator(0.0);
    double jaccardDenominator(0.0);
    stringstream ss;

    vector<int> compareToVector;
    vector<int> compareAgainstVector;

    for(unsigned int i = 0; i < containingVector.size(); i++){
            compareToVector = containingVector.at(i);
            index1 = i;
            jaccardDenominator = compareToVector.size();
            for(unsigned int j = 0; j < containingVector.size(); j++){
                    jaccardNumerator = 0.0;
                    if(i != j){
                            compareAgainstVector = containingVector.at(j);
                            index2 = j;
                            for(unsigned int k = 0; k < compareToVector.size(); k++){
                                    if(compareToVector.at(k) == compareAgainstVector.at(k)){
                                            jaccardNumerator = jaccardNumerator + 1.0;
                                    }
                            }
                            currentJaccardValue = jaccardNumerator/jaccardDenominator;
                            if(currentJaccardValue >= maxJaccardValue){
                                    maxJaccardValue = currentJaccardValue;
                                    if(index1 < 10){
                                            ss << "New Maximum at: " << index1 << "  " << index2 << " " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";

                                    }else if(index2 < 10){
                                            ss << "New Maximum at: " << index1 << " " << index2 << "  " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";

                                    }else{
                                            ss << "New Maximum at: " << index1 << " " << index2 << " " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";
                                    }
                            }
                    }else{
                    }
            }
    }
    string s = ss.str();
    return s;
 }

printVector是一个简单的for循环,用于遍历每个向量中的项目并将它们作为字符串返回。返回一个字符串。

 string Similarity::printVector(vector<int> vector){
    ostringstream ss;
    string s = "( ";
    for(unsigned int i = 0; i < vector.size(); i++){
            ss << (vector.at(i));
            ss << " ";
    } s+= ss.str();
    s+= ")";
    return s;
 }

当我编译并运行时,我得到了一个

 Segmentation fault (core dumped)

当代码只使用cout时,它运行得非常好。我不太清楚为什么使用cout的streamstring会导致这种情况。

感谢所有帮助, 提前谢谢。

*编辑:为清晰起见而编辑。

0 个答案:

没有答案