Valgrind结果解释

时间:2013-11-26 21:48:35

标签: c++ segmentation-fault valgrind

我在一个更大的程序中有一部分代码,当我使用通过valgrind运行的部分时,我会在程序中稍后出现seg错误。

我隔离了对执行某些TAG操作的函数的调用。有人可以向我解释这个输出是否有问题?

[http://pastebin.com/5J6PHxSs] [1]

这是代码:

  std::string Tag::GetDataAsString()
  {
     if(IsDataAvailable() <=0)
       return "";
     std::string retData="";
     std::vector<byte>& tmp = *this->Data;

     for(int i=0, length = tmp.size(); i!=length; ++i)
     {
         if(tmp[i] != 0x00)
             retData+=tmp[i];
         else
             break;
     }

     return retData;
}

修改1

解释:  数据是:std :: vector *在需要时分配的数据。  的std ::矢量&安培; tmp = * this-&gt;数据; //这只是他们可能没有使用():D

我只是想让其他人写的代码工作。

我知道在main()方法中调用Settings :: GetInstance(),它从文件中读取一些用标签写的数据。标签是一个操作标签的类,可以嵌套或包含数据,这就是为什么我认为存在数据和子标签向量的动态配置。

那么会发生什么,有一种方法:

LoadFromTaggedDump( TagCollection & coll )
{
     SomeData scr;
     Tag* someTag;
     std::vector<SomeData*>& tmpVect = *_localizedSomeDb; 
     for(int id = 0, dbLen = tmpVect.size(); id != dbLen; ++id)
     {
                 Tag* tmp;
         someTag= coll.GetTag(SOME_TAG | id);
        if(someTag== NULL)                
              continue;
        tmpVect[id]->SomeDat[i]=tmp->GetDataAsString();
      }
 }

因此,valgrind在GetDataAsString()中发现了一些损失,并且应该全部清除。

我不明白为什么新的运营商会丢失什么?

0 个答案:

没有答案