** ./build/minmax&#39 ;: free()中的错误:下一个大小无效(快) - std :: vector

时间:2016-10-30 14:26:25

标签: c++ free glibc

我知道问题 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 )?

因为,这个变量是临时的,它的持续时间仅适用于整个迭代。

0 个答案:

没有答案