我一直在做一个项目,坦白说我对C ++不是很有经验;但是我做了尽可能多的研究,尝试了四到五种不同的循环设置。
shared_ptr,unique_ptr,* this,this ..指针被复制并且稍后对其进行的更改未提交给向量或,向量设法在向量时使程序崩溃增量。 int或iterator。
我可以确认save()
函数不是问题的根源,因为Logger::Event()
会在save()
之后打印出来,但是在循环(函数)退出之后应该立即再次打印日志同样。当向量被确认(通过size()
)以具有多个项目时,它会在第一次迭代后崩溃。
这是我修剪过的DataFile.cpp:
vector<DataFile*> DataFile::allDataFiles;
void DataFile::saveAll(){
Logger::Event("in SaveALL();");
Logger::Event(to_string(allDataFiles.size()));
for (vector<DataFile*>::iterator it = allDataFiles.begin(); it != allDataFiles.end(); it++){
Logger::Event((*it)->_FILE);
if ((*it)->saveOnClose) (*it)->save();
Logger::Event("End of saveAll loop iteration.");
}
}
DataFile::DataFile(string fn, bool r, bool soc){
//...
allDataFiles.push_back(move(this));
}
来自我的DataFile.h
public:
DataFile(std::string _fileName, bool readNow = true, bool saveOnClose = true);
bool save();
static void saveAll();
private:
static std::vector<DataFile*> allDataFiles;
我知道我没有使用save()
的返回值,这是为了将来使用。我目前没有使用调试器,但使用最新版本的MinGW和MSYS来使用NetBeans从我的Windows 8笔记本电脑制作。正如我之前所说的,上面的输出如下。
EV 19:04:34 Event: in SaveALL();
EV 19:04:34 Event: 2
EV 19:04:34 Event: tEST.aconf
EV 19:04:34 Event: End of saveAll loop iteration.
RUN FAILED (exit value -1,073,741,819, total time: 4s)