C ++ Vector Loop和push_back问题?

问题描述

| 当我尝试修改向量数组时,我不知道出了什么问题。 这是我的向量数组:
14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248
14248
14248
14248
我想在这里尝试做的是,如果向量字符串包含\“ AAAAA \”,我会以\“-\”的形式返回到不同的向量cRntiModDash。如果不是\“ AAAAA \”,那么我会推回原始字符串。 因此,修改后应包含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,那就可以了。我检查了修改后的向量没有空格。如果有人能认出我的问题,我将不胜感激。我已经尝试了一段时间,但看不到问题所在。提前致谢。     

解决方法

vector<std::string> cRntiModDash;                   
// ...
all.push_back(&cRntiModDash);
您将指针(可能是局部变量)存储在
all
中。一旦“ 4”超出范围,“ 5”将包含一个指向不再有效的对象的指针。该存储位置将被其他变量重用,以后当您尝试访问ѭ5the中的向量时,可能会发生任何事情。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...