2011-07-08 6 views
0

以下の例のように、ベクトル参照を関数に渡す際に間違っていますか?このコードはうまく動作しています。しかし、私のプロジェクトで同じ種類のコードが私にクラッシュを与えます。どうしてか分かりません。ベクトルを参照する必要がある関数を呼び出す際にクラッシュする

std :: vector &を必要とする関数を呼び出すときはいつでも。呼び出された関数では、ベクトルのサイズは何百万分の一に達します。私は実際にこのクラッシュを取得しているスクリーンショットを添付しました。私が見ることができない、私はちょうど実装のこれらのタイプで何か間違って...私はクラッシュを取得しています

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

実際のコードがある知りたい enter image description here ...

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

数百万のメンバーで発生する問題を再現するために、メンバーコードが10個のおもちゃコードは期待できません。あなたはそのイメージの代わりに実際のコードを投稿できますか? –

+2

スクリーンショットにはクラッシュに関する有用な情報は表示されず、投稿したコードにはエラーはありません。 –

+0

そのコードはクラッシュしません。完全な再コンパイルを試してください。おそらくあなたは古いものとリンクしています。 – spraff

答えて

1

この実装では何も間違っていますが、目に見えない最終結果がないため、失敗したコードと正確に一致しない可能性があります。

+0

はいはい...それは単なるダミーです! – dearvivekkumar

関連する問題