以下の例のように、ベクトル参照を関数に渡す際に間違っていますか?このコードはうまく動作しています。しかし、私のプロジェクトで同じ種類のコードが私にクラッシュを与えます。どうしてか分かりません。ベクトルを参照する必要がある関数を呼び出す際にクラッシュする
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;
}
実際のコードがある知りたい ...
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;
}
数百万のメンバーで発生する問題を再現するために、メンバーコードが10個のおもちゃコードは期待できません。あなたはそのイメージの代わりに実際のコードを投稿できますか? –
スクリーンショットにはクラッシュに関する有用な情報は表示されず、投稿したコードにはエラーはありません。 –
そのコードはクラッシュしません。完全な再コンパイルを試してください。おそらくあなたは古いものとリンクしています。 – spraff