问题描述
|
当我尝试修改向量数组时,我不知道出了什么问题。
这是我的向量数组:
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中的向量时,可能会发生任何事情。