我在一个更大的程序中有一部分代码,当我使用通过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()中发现了一些损失,并且应该全部清除。
我不明白为什么新的运营商会丢失什么?