我知道问题 free():无效的下一个大小(快)一直是stackoverflow上发现的一般错误。但是,我一直在寻找关于这个问题的答案,我没有找到像我的代码中那样的东西。
不幸的是,我无法发布所有代码。所以,我会给你所有必要的代码。我希望有人可以提供帮助。
void functionA (
std::vector<std::vector<int>> & paths,
std::vector<int> & bases,
stream_t & stream,
rca::Network & network)
{
//before loop I do some things...
for (auto m : stream.m_group.getMembers ()) {
int b = bases[m];
int id = sources[b];
rca::Path p (paths[m]);
//here I do some other things...
}
// and after the loop I do more things...
}
在循环内调用函数 functionA ,创建变量 paths 并传递给functionA。
在第二次迭代中我得到了错误。
所以,它很有趣,因为我读到的所有帖子都谈到了内存的分配和释放。但是,在我的情况下,我不会这样做......
我已经创建了另一个模拟此行为的函数 - teste :
void teste (std::vector<std::vector<int>> & paths,
stream_t & stream)
{
for (auto m : stream.m_group.getMembers ()) {
rca::Path p (paths[m]);
cout << p << endl;
}
}
正如您所看到的,两个函数都有代码来访问路径的位置并获取存储在那里的向量。但是,当我在主循环上再次创建路径时,代码在第二次迭代时调用时会出现问题......
主循环是:
for(auto&& group : m_streams) {
//some code cames before here
//the code cracks here after first iteration
std::vector<std::vector<int>> paths;
functionA (paths, ...);
//if a replace functionA and use teste, the code works...
//teste(paths, ...)
}
所以,问题是:当我在第二次迭代中创建路径变量时(当我使用 functionA 时)为什么代码在主循环中出现问题?而是 teste )?
因为,这个变量是临时的,它的持续时间仅适用于整个迭代。