0

メソッド「writeToVector()」への引数としてベクトルの配列 (簡単にするためにサイズ 2) を渡そうとしています。このメソッドは、文字列値をベクターに割り当てます。

動作するスタンドアロンのテスト プログラム (以下) を作成しました。しかし、実際のプログラムに統合すると機能しません。

以下の私のプログラムに何か問題がありますか?それは「偶然」にしか機能していませんか?

「writeToVector()」メソッドの署名が正しいかどうかはわかりません。

typedef std::vector<std::string> ExtensionType;

void writeToVector(ExtensionType *extensions)
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

void main(void)
{
  ExtensionType extensions[2];
  getExtensions(extensions);
  for(// loop through array of vectors)
  {
    for(// loop through vector's elements)
    {
     // print vector contents
    }
  }
}
4

2 に答える 2

0

この関数は、渡されたポインタがサイズ 2 以上の配列の先頭を指していると想定する点で危険です。そうでない場合は、ヒープに落ちます。そのため、サイズが 2 であることが保証されているもの、たとえばstd::array<EtnensionType, 2>.

void writeToVector(std::array<ExtensionType, 2>& extensions)
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

それから

int main()
{
  std::array<ExtensionType, 2> extensions;
  getExtensions(extensions);
}

本当に配列にこだわっている場合は、サイズが 2 のみであることを確認してください。

void writeToVector(ExtensionType (&extensions)[2])
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

int main()
{
  ExtensionType extensions[2];
  getExtensions(extensions);
}
于 2013-05-30T14:27:58.557 に答える