在调用需要引用向量的函数时发生崩溃

时间:2011-07-08 14:57:04

标签: c++ stl

我想知道传递向量函数的传递是否有问题,如下例所示。这段代码运行良好而且很好。但是我项目中的相同类型的代码让我崩溃了。我不知道为什么。

在这种情况下,每当我调用需要std :: vector&的函数时。然后在被调用的函数中,向量的大小达到了几百万......我已经附上了截图,我实际上是在崩溃。 enter image description here 我只是想知道这些类型的实现是否有问题...

#include <iostream>
#include <vector>
#include <string>

class A {
public:
    A() {}
    ~A() {}
    void GetVector(std::vector<std::wstring> &in) {
        std::wstring s = L"Hello";
        for(int i = 0; i < 10; i++)
            in.push_back(s);
    }
};

class B {
public:
    B() {}
    ~B() {}

    void GetData() {
        A a;
        std::vector<std::wstring> s;
        a.GetVector(s);
    }
};

int main() {
    B b;
    b.GetData();

    return 0;
}

我遇到崩溃的真实代码...

void SCPreferenceComp::PopulateComboBox()
{
    SCConfig *config = SCConfig::GetInstance();
    std::vector<std::wstring> languages;
    config->GetAllLangugesName(languages);
    for(size_t i = 0; i != languages.size(); i++)
        mLangListComboBox->addItem(languages[i].c_str(), i+1);
    if(mLangListComboBox->getNumItems() > 0)
        mLangListComboBox->setSelectedId(1);
}

bool SCConfig::GetAllLangugesName(std::vector<std::wstring> &outLangNames)
{
    bool retVal = false;
    do
    {
        if(!mXMLDoc)
            break;
        xercesc::DOMNodeList *langNodeList = mXMLDoc->getElementsByTagName(strToX("language"));
        if(!langNodeList)
            break;
        const XMLSize_t langCount = langNodeList->getLength();
        for(XMLSize_t i = 0; i < langCount; i++)
        {
            xercesc::DOMNode *curLangNode = langNodeList->item(i);
            if(!curLangNode)
                continue;
            xercesc::DOMElement *curLangElem = dynamic_cast<xercesc::DOMElement*>(curLangNode);
            if(!curLangElem)
                continue;
            wxString s = strToW(curLangElem->getAttribute(strToX("name")));
            outLangNames.push_back(s.c_str());
        }
        retVal = true;
    }while(false);

    return retVal;
}

1 个答案:

答案 0 :(得分:1)

除了没有任何可见的最终结果导致我认为它可能与您的失败代码完全匹配之外,我在该实现中看不出任何错误。