C ++ Vector Loop и push_back проблема? - PullRequest
0 голосов
/ 25 мая 2011

Я не мог понять, что пошло не так, когда я пытался изменить векторный массив. Вот мой векторный массив:

14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248
14248
14248
14248

То, что я хочу попробовать сделать здесь, если векторная строка содержит «AAAAA», я вернусь как «-» к другому вектору cRntiModDash. Если НЕ «ААААА», то я возвращаю исходную строку.

Итак, вектор cRntiModDash должен содержаться после изменения:

-
-
-
-
-
14248
14248
14248
14248
14248

Это то, что я хочу, но когда я возвращаюсь к многовекторному «все», тогда что-то не так и вызывает выход.

std::vector<std::vector<string>*> all;
vector<std::string> cRntiModDash;                   
for (vector < string >::iterator ct(cRnti.begin()); ct != cRnti.end(); ct++)
{ 
    std::string cRntTmp (*ct);
    if (cRntTmp.find("AAAAA") != string::npos)
        cRntiModDash.push_back("-");
    else
        cRntiModDash.push_back(*ct);
    }
}
all.push_back(&cRntiModDash);


for (unsigned int j = 0; j < cRnti.size(); j++)
{
  for (std::vector<std::vector<string>*>::iterator i = all.begin(); i != all.end(); i++)
  {
      if (i != all.begin()) 
      {
         CSVToFile << ",";
         std::cout<< ",";
      }
    std::cout<< (**i)[j];
    CSVToFile <<(**i)[j];
  }
  std::cout<< std::endl;
  CSVToFile << std::endl;
}
CSVToFile.close();

Если я не изменю вектор cRnti, тогда все в порядке. Я проверил мой измененный вектор не было пробелов. Если кто-то может распознать мою проблему, я очень ценю. Я был судим какое-то время, но не видел проблемы. Заранее спасибо.

1 Ответ

2 голосов
/ 25 мая 2011
vector<std::string> cRntiModDash;                   
// ...
all.push_back(&cRntiModDash);

Вы храните указатель на (предположительно) локальную переменную cRntiModDash в all. Как только cRntiModDash выходит из области видимости, all будет содержать указатель на недопустимый объект. Эта ячейка памяти будет использоваться другими переменными, и при попытке доступа к векторам в all позже может произойти что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...